代码之家  ›  专栏  ›  技术社区  ›  gremo

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

  •  0
  • gremo  · 技术社区  · 16 年前

    我知道第一条路可以走大部分的路。但是,这也将捕获/Product/Edit/blabla(我正在使用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" }
            );
        }
    

    但这是错误的!为什么?如果不是最小长度为1的整数,则第一条路由不应匹配。我还需要处理未找到的coutroller和action。。。有什么想法吗?

    3 回复  |  直到 16 年前
        1
  •  8
  •   LukLed    16 年前

    您应该将表达式放在第四个参数中。请阅读以下内容:

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

    清单3。

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

    正则表达式\d+匹配 一个或多个整数。此约束导致产品路线匹配

    • /产品/3

    但不是以下URL:

    • /产品/苹果


    这些浏览器请求将被删除 这个 找不到资源

        2
  •  0
  •   SLaks    16 年前

    你误会了 MapRoute 扩展方法。

    第三个参数是管线参数的一组默认值。

    在您的情况下,您告诉它 id 参数为 \d{1,} .

        3
  •  0
  •   gremo    16 年前

    [HandleError]
    

    <customErrors mode="On" defaultRedirect="/Error/NotFound" />
    

    将调用显示(静态)aspx视图的ErrorController方法“NotFound”。