使用正则表达式捕获所有不起作用的路由

gre*_*emo 0 c# asp.net-mvc routes

我知道第一条路线将占据大部分路径.但是,这也会捕获/ Product/Edit/blablabla(我正在使用ASP.NET路由调试器):

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", 
            "{controller}/{action}/{id}",                          
            new { controller = "Home", action = "Index", id = @"\d{1,}" }
        );

        routes.MapRoute(
            "Catch All",
            "{*path}",
            new { controller = "Error", action = "NotFound" }
        );
    }
Run Code Online (Sandbox Code Playgroud)

但这是错的!为什么?如果不是长度为1的整数,则第一条路线不匹配.我还需要处理未找到的coutroller和动作......任何想法?

非常感谢!

Luk*_*Led 8

您应该将表达式放在第四个参数中.读这个:

http://www.asp.net/LEARN/MVC/tutorial-24-cs.aspx

清单3.

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"},
    new {productId = @"\d+" }
 );
Run Code Online (Sandbox Code Playgroud)

正则表达式\ d +匹配一个或多个整数.此约束导致Product路由匹配以下URL:

  • /产品/ 3
  • /产品/ 8999

但不是以下网址:

  • /产品/苹果
  • /产品


这些浏览器请求将由另一个路由处理,或者,如果没有匹配的路由,则无法找到该资源.将返回错误.