开发者

Understanding routing in ASP.NET MVC

开发者 https://www.devze.com 2023-02-10 12:17 出处:网络
I\'m trying to wrap my mind around the way ASP.NET MVC implements routing. From what is my current understanding, it seems my route string much have a \"{controller}\" and \"{action}\", otherwise it

I'm trying to wrap my mind around the way ASP.NET MVC implements routing.

From what is my current understanding, it seems my route string much have a "{controller}" and "{action}", otherwise it doesn't work?

How would I define the route that using a SearchController and Search action taking both SearchKeywor开发者_StackOverflow社区ds and SearchCaseSensitive arguments had the following URL?

domain/SearchKeywords/CaseSensitive

Even simpler, how do I map domain to controller SearchController and to Search?


From what is my current understanding, it seems my route string much have a "{controller}" and "{action}", otherwise it doesn't work?

Values for the controller and action tokens are required. You have 2 options for providing the values:

1) Using {controller} and {action} tokens on the URL template. e.g.:

routes.MapRoute(null, "{controller}/{action}");

2) Using default values for controller and action. e.g.:

routes.MapRoute(null, "some-url",
   new { controller = "Search", action = "Search" }
);

How would I define the route that using a SearchController and Search action taking both SearchKeywords and SearchCaseSensitive arguments had the following URL?

domain/SearchKeywords/CaseSensitive

The URL host (or domain) is not considered by the routing system, only the application relative path. You can do this:

routes.MapRoute(null, "{SearchKeywords}/{CaseSensitive}",
   new { controller = "Search", action = "Search" }
);

You can also provide defaults for SearchKeywords and CaseSensitive, if you want to make either of them optional.


You can add controller = "Search", action = "Search" to the defaults (the last parameter).

The routing engine will use values in defaults to fill in for parameters that aren't in the URL.


If you want to have a 'domain' parameter in your route, you must put this at the top of the route registration. The 'domain' parameter in the second anonymous object is a constraint and here is set to be a regular expression that tests to see if the domain is either of the possible domains "DefaultDomain" or "OtherDomain".

        routes.MapRoute("DomainRoute", "{domain}/{controller}/{action}",
                        new {domain = "DefaultDomain", controller = "Search", action = "Search"},
                        new {domain = "DefaultDomain|OtherDomain"});
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号