【问题标题】:How to catch IIS specific errors irrespective of HTTP error code无论 HTTP 错误代码如何,如何捕获 IIS 特定错误
【发布时间】:2015-01-10 07:31:49
【问题描述】:

我正在努力捕捉 IIS 本身引发的错误。我想记录一个 IIS 错误以及 MVC 错误。

我正在使用最新版本的ASP.NET MVC 5 并在IIS 7.5 中运行网站并在本地调试它。我正在调试Visual Studio 2013

我正在尝试使用 web.config 中的 httpErrors 标记。我已经开始测试 404 错误,但同样适用于所有错误,500、403 等。我只需要一个起点并决定从 404 错误开始。

我的 web.config 中有以下配置:

<system.web>
    <customErrors mode="Off" />
<system.web>

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" path="Http404.html" responseMode="File" />
    </httpErrors>
</system.webServer>

我尝试了以下 URL:

  • www.mywebsite.com/foo/bar - 错误被捕获,我的断点在 Application_Error 方法中被命中
  • www.mywebsite.com/test.html - 此文件不存在。它没有被我的 Application_Error 方法捕获,所以我无法记录它。显示正确的错误页面,同上

这就是我的 Application_Error 方法中的内容:

protected void Application_Error(object sender, EventArgs e)
{
    // I have minimal code here
    // First want to see if I can capture IIS errors here

    Exception exception = Server.GetLastError();
    HttpException httpException = exception as HttpException;
}

如果在 Application_Error 方法中没有捕获到 IIS 错误,我该如何记录它?

我也在action方法中尝试过这个,我的Application_Error方法也没有捕获到,但是显示了正确的错误页面:

public ActionResult Index()
{
    return HttpNotFound();
}

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


    【解决方案1】:

    转到 App-Start 文件夹中的 FilterConfig.cs。 为特定类型的异常添加你想要的异常类型和错误页面。

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new LoggingExceptionFilter());
                filters.Add(new HandleErrorAttribute() { ExceptionType = typeof(HttpException), View = "HttpExceptionError" }, 2);
    
            }
    

    SHARED 文件夹中创建一个名为 HttpExceptionError 的视图。

    这将处理所有关于 http 的异常

    【讨论】:

      【解决方案2】:

      如果我没记错的话,IIS 错误处理与 ASP.NET 是分开的,即使在集成管道模式下也是如此。当 IIS 决定返回一个非 200 状态码时,在 ASP.NET 中不应该创建 HttpException 对象来匹配该错误,因此在 ASP.NET 中无法知道 IIS 将要做什么。

      如果你真的想记录所有错误状态,你可以使用C#编写一个IIS扩展来做到这一点,

      http://www.iis.net/learn/develop/runtime-extensibility/developing-a-module-using-net

      【讨论】:

      • 感谢您的链接。我可以记录 ASP.NET 错误并为 ASP.NET 和 IIS 错误显示一个不错的页面。我只是无法记录 IIS 错误。
      猜你喜欢
      • 2011-03-12
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多