使用自定义错误页面维护错误信息

时间:2014-12-11 18:40:42

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

我想抓住404和500错误。我已经阅读了如此多的叠加流动问题和答案,似乎都说他们的方式是最好的。所以我刚刚选择了一个并且随之而去。它做了我需要它做的事情,但是我似乎无法在任何地方获得实际的错误信息。

我需要开始将这些记录到我们的数据库中,我怎么得到错误?我想知道他们试图访问的链接等。

以下是我如何过滤掉使用IIS7 +

的错误
<httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" />
      <error statusCode="404" responseMode="ExecuteURL" path="/Error/PageNotFound" />
      <remove statusCode="500" />
      <error statusCode="500" responseMode="ExecuteURL" path="/Error/Error500" />
    </httpErrors>

当我单步执行PageNotFound操作时,我似乎无法获取错误信息。

我尝试(Exception exception)作为参数,我尝试了Exception exception = Server.GetLastError();

如何获取错误,然后我可以将其记录到我们的数据库中?

1 个答案:

答案 0 :(得分:0)

像这样创建自定义HandleErrorAttribute

public class CustomHandleErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        // Execute the normal exception handling routine...
        base.OnException(filterContext);            

        var exception = filterContext.Exception;
        if (exception is HttpException)
        {
            var httpException = exception as HttpException; 
            if(httpException.ErrorCode == 404)
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { 
                    action = "PageNotFound", 
                    controller = "Error",
                    error = httpException.Message
                }));                
            }
            // else if...
        }
    }
}

并且,在FilterConfig下的App_Start课程中

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new CustomHandleErrorAttribute());
    }
}