我知道第一条路线会捕捉大部分路径。但是,这也会捕获/ 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" }
);
}
但这是错的!为什么?如果不是长度为1的整数,则第一条路线不匹配。我还需要处理未找到的coutroller和动作......任何想法?
非常感谢!
答案 0 :(得分: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+" }
);
正则表达式\ d +匹配 一个或多个整数。此约束导致Product路由匹配 以下网址:
但不是以下网址:
这些浏览器请求将是 由另一条路线处理,或者,如果没有匹配的路线,则 The 无法找到资源将返回错误。
答案 1 :(得分:0)
答案 2 :(得分:0)
编辑:已解决。
[HandleError]
将(自动)将异常对象传递给Error.aspx视图,该视图显示内部消息。
<customErrors mode="On" defaultRedirect="/Error/NotFound" />
将调用ErrorController方法“NotFound”,它显示(静态)aspx视图。