如何在没有继承的情况下向自定义错误页面提供错误消息?

时间:2016-04-19 15:55:54

标签: c# asp.net-mvc razor error-handling

我在 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());
  ...
}

1 个答案:

答案 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");
        }
    }