我正在努力捕获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();
}
答案 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