自定义路由

自定义路由提供了特定的路由选择来处理特定的传入请求。

要定义自定义路由,请记住,添加到路由表的路由顺序很重要。

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
    );
}

controlleraction 名称保留。默认情况下,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),在路由中设置控制器名称时必须省略。