[英]How to catch IIS specific errors irrespective of HTTP error code
我正在努力捕获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错误,如何记录IIS错误?
我也在动作方法中尝试过此方法,它也未在我的Application_Error方法中捕获,但显示了正确的错误页面:
public ActionResult Index()
{
return HttpNotFound();
}
转到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的所有异常
如果我没记错的话,即使在集成管道模式下,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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.