第一条路由已经匹配任何形式的 url blog/slug
。
在解析路由时,ASP.NET MVC 将尝试使用第一个匹配项,即使没有任何操作来获取该方法。ASP.NET MVC 的路由仍然不会尝试下一个路由。
因此,对于您的路由,urlblog/my-first-article
将匹配第一个 url,并且 MVC 将在类上查找my-first-action
方法。BlogController
解决方案 1
您可以为每个方法定义单独的路由,如下所示:
routes.MapRoute("Blog index",
"blog",
new { controller = "Blog", action = "Index" });
routes.MapRoute("Blog RSS feed",
"blog/rss",
new { controller = "Blog", action = "Rss" });
routes.MapRoute("Posts by tag",
"blog/Tags/{params}",
new { controller = "Blog", action = "Tags" });
routes.MapRoute("BlogPost",
"blog/{slug}",
new { controller = "Blog", action = "post" });
解决方案 2
{action}
您可以使用约束在第一条路线中定义有效值。
routes.MapRoute("Blog",
"blog/{action}/{param}",
new { controller = "Blog", action = "Index", param = UrlParameter.Optional },
new { action = 'index|rss|tags' });
routes.MapRoute("BlogPost",
"blog/{slug}",
new { controller = "Blog", action = "post" });
约束采用正则表达式的形式。