Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
241 views
in Technique[技术] by (71.8m points)

c# - Any way to create a catch all Route

I have many actions on a controller

Controller1Action1
Controller1Action2
Controller1Action3
Controller1Action4
Controller1Action5
Controller1Action6

I would like my URLs to always be just:

Action1
Action2
Action3
Action4
Action5
Action6

Is there an easy way to do this? I won't have any conflicts where:

Controller1Action1
Controller2Action1

Every action will have a unique name.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You should be able to do something like this:

routes.MapRoute(
    "CatchAll",
    "{action}/{*path}",
    new { controller = "MyController", action = "Index" }
);

Essentially you're telling it all requests should treat the path as the Action and they should all go to "MyController". The action = "Index" acts as a default in the event that an Action is not provided in the Url.

The above route definition will evaluate to true even if extra, invalid path data is appended after the action name. What that means is that both /Action1 and /Action1/251958125ad/2512qsadfa2 will go to Action1(). If you would prefer that only the exact path be allowed:

routes.MapRoute(
    "CatchAll",
    "{action}",
    new { controller = "MyController", action = "Index" }
);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...