【发布时间】:2011-08-07 19:10:10
【问题描述】:
我有一个 MVC 2 应用程序,它应该总是提供一个“不错”的 404 页面。
但是目前我得到了一个低级别的 .Net:“'/sitename' 应用程序中的服务器错误...”
我有一个基本控制器,它有一个 NotFound 动作,可以呈现漂亮的 404 页面。
处理缺失的动作:
protected override void HandleUnknownAction(string actionName)
{
this.NotFound(actionName).ExecuteResult(this.ControllerContext);
}
因此,对{site}/ValidController/NotAnAction 的访问被正确路由。
但是访问{site}/NotAController 不会。
我设置了一条包罗万象的路线:
routes.MapRoute(
"MVC routes",
"{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
"Catch All",
"{*url}",
new { controller = "System", action = "NotFound" });
catch all 正确捕获不匹配的路由。
所以{site}/Invalid/Action/id/extra 被正确地路由通过全部捕获。
但是{site}/Invalid 是通过“MVC 路由”路由获取的,并且 ASP.Net 去寻找InvalidController,并在找不到时抛出一个愚蠢的异常。
我知道我可以在web.config 级别覆盖它,但这只是重定向到页面。我想知道路由模式何时匹配但控制器不是有效的控制器名称。
我在哪里可以捕捉和改变这种行为?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-2 routing asp.net-mvc-routing