【问题标题】:Maintain error information with custom error pages使用自定义错误页面维护错误信息
【发布时间】:2014-12-11 18:40:41
【问题描述】:

我正在尝试捕获 404 和 500 错误。我已经阅读了很多 stack over flow 问题和答案,似乎都说他们的方式是最好的。所以我只是选择了一个并接受了它。它完成了我需要它做的事情,但是我似乎无法在任何地方获得实际的错误信息。

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

这是我过滤掉我们使用 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();

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

【问题讨论】:

  • 您是否查看过 ELMAH 以捕获错误?
  • 简单地说,希望有比添加另一个第三方工具更好的解决方案。 @汤米
  • 此错误处理是通过 IIS 而不是 MVC 完成的,这就是您没有收到异常的原因。作为解决方案之一,您可以在 global.asax 文件中覆盖 OnAppllicationError 方法以查看实际异常,或实现自定义错误处理程序全局过滤器
  • 你使用的是什么版本的 asp.net MVC?
  • asp.net mvc 4.5 @ataravati

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


【解决方案1】:

像这样创建一个自定义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_Start 下的FilterConfig 类中:

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

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2015-08-26
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多