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

C# 使用正则表达式捕获所有不工作的路由,c#,asp.net-mvc,routes,C#,Asp.net Mvc,Routes,我知道第一条路可以走大部分的路。但是,这也将捕获/Product/Edit/blabla(我正在使用ASP.NET路由调试器): 但这是错误的!为什么?如果不是最小长度为1的整数,则第一条路由不应匹配。我还需要处理未找到的coutroller和action。。。有什么想法吗 非常感谢 您误解了扩展方法 第三个参数是管线参数的一组默认值 在您的例子中,您告诉它id参数的默认值是\d{1,}您应该将表达式放在第四个参数中。请阅读以下内容: 清单3 routes.MapRoute( "Pro

我知道第一条路可以走大部分的路。但是,这也将捕获/Product/Edit/blabla(我正在使用ASP.NET路由调试器):

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


非常感谢

您误解了扩展方法

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


在您的例子中,您告诉它
id
参数的默认值是
\d{1,}

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

清单3

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"},
    new {productId = @"\d+" }
 );
正则表达式\d+匹配 一个或多个整数。此约束导致产品路线匹配 以下网址:

  • /产品/3
  • /产品类别/8999
但不是以下URL:

  • /产品/苹果
  • /产品

这些浏览器请求将被删除 由另一条路线处理,如果没有匹配的路线,则 找不到资源。将返回错误。

编辑:已解决

[HandleError]
将(自动)将异常对象传递到Error.aspx视图,该视图显示内部消息

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


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

符号表示什么?它应该在引号中吗?
@
符号告诉C#编译器忽略转义码。例如:
@“\”
@“\”“\”
您可以使用新的{productId=@“\d+”}定义额外的路由进行编辑。
<customErrors mode="On" defaultRedirect="/Error/NotFound" />