自定义路由
自定义路由提供了特定的路由选择来处理特定的传入请求。
要定义自定义路由,请记住,添加到路由表的路由顺序很重要。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// this is an advanced custom route
// you can define custom URL with custom parameter(s) point to certain action method
routes.MapRoute(
"CustomEntry", // Route name
"Custom/{entryId}", // Route pattern
new { controller = "Custom", action = "Entry" } // Default values for defined parameters above
);
// this is a basic custom route
// any custom routes take place on top before default route
routes.MapRoute(
"CustomRoute", // Route name
"Custom/{controller}/{action}/{id}", // Route pattern
new { controller = "Custom", action = "Index", id = UrlParameter.Optional } // Default values for defined parameters above
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // Route pattern
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Default values for defined parameters above
);
}
controller
和 action
名称保留。默认情况下,MVC 将 URL 的 {controller}
部分映射到类 <controller>Controller
,然后查找名为 <action>
的方法,而不添加任何后缀。
尽管使用 {controller}/{action}/{parameter}
模板创建一系列路径可能很诱人,但考虑到这样做会泄露应用程序的结构并使 URL 变得有些脆弱,因为更改控制器的名称会更改路径并中断用户保存的链接。
首选显式路线设置:
routes.MapRoute(
"CustomRoute", // Route name
"Custom/Index/{id}", // Route pattern
new { controller = "Custom", action = nameof(CustomController.Index), id = UrlParameter.Optional }
);
(你不能将 nameof
运算符用于控制器名称,因为它将具有附加后缀 Controller
),在路由中设置控制器名称时必须省略。