我在本地有一个带有 IIS7 和 IIS express 的 asp.net mvc 3 应用程序,它使用 Application_Error 来记录异常并重定向到自定义错误页面。我的应用程序有不同的区域,只要控制器或操作不匹配,就会调用 application_error,但不是针对该区域。
以下是使用的路由示例:
routes.MapRoute(
"Default",
"{region}/{controller}/{action}/{id}",
new { region = "uk", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { region = new RegionWhitelistConstraint() } // constraint for valid regions
);
在这种情况下,Application_Error 将被触发 /uk/NotFoundPage 但不会触发 /foo/Home
这里对区域的约束:
public class RegionWhitelistConstraint : IRouteConstraint
{
public bool Match(System.Web.HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
var whiteList = Region.DefaultWhiteList;
var currentRegionValue = values[parameterName].ToString();
return whiteList.Contains(currentRegionValue);
}
}
我已经看到这个问题,它建议添加一条捕获所有路由,但除此之外,我想知道是否有一种触发 Application_Error 的方法,因为它是为控制器或操作完成的。