自定義路由
自定義路由提供了特定的路由選擇來處理特定的傳入請求。
要定義自定義路由,請記住,新增到路由表的路由順序很重要。
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
),在路由中設定控制器名稱時必須省略。