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

本文关键字:错误 维护 信息 自定义 | 更新日期: 2023-09-27 18:33:57

>我试图捕获 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();

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

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

创建一个自定义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...
        }
    }
}

并且,在App_StartFilterConfig课上:

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