我在 Web.config 文件中有这样的段落。
<system.webServer>
...
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear />
<error statusCode="404" path="/Home/Err/404?message=Not found" responseMode="Redirect" />
<error statusCode="500" path="/Home/Err/500?message=Total poof" responseMode="Redirect" />
</httpErrors>
</system.webServer>
除了我希望自动提供消息之外,这应该是有效的,就像默认情况一样,包括堆栈跟踪和内部异常。
问题是我不拦截错误,而是让默认过滤器为我处理。有没有比inheriting HandleErrorAttribute更简单的方法?
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
...
}
答案 0 :(得分:1)
因为异常可以来自各个层,我需要记录异常并路由到正确的错误页面,我已经处理了global.asax中的异常。
void Application_Error(Object sender, EventArgs e)
{
var exception = Server.GetLastError();
AppEventSource.Log.Error(HttpContext.Current.Request.RawUrl, GetUserName(HttpContext.Current.User), exception.Message, HttpContext.Current.Request.UserHostAddress);
Server.ClearError();
if (exception is UnauthorizedAccessException)
{
Response.Redirect("~/Error/401");
}
else {
//generic error
Response.Redirect("~/Error");
}
}