无论HTTP错误代码如何,如何捕获IIS特定的错误

时间:2014-11-13 08:08:30

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

我正在努力捕获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>

我尝试了以下URLS:

  • 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错误,该如何记录?

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

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

2 个答案:

答案 0 :(得分:0)

转到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

的所有例外情况

答案 1 :(得分:0)

如果我没记错的话,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