我正在尝试捕获IIS错误但根本没有获胜。除了ASP.NET抛出的错误,我还想捕获源自IIS的所有错误。我开始尝试404
错误,我可以选择任何其他错误,但选择404作为起点。
我使用的是最新版本的ASP.NET MVC5
并通过IIS 7.5
运行网站。
我的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="/Error/Http404" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
我的错误控制器中有以下内容:
public class ErrorController : Controller
{
public ActionResult Http404()
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
return View();
}
}
我正在抛出这样的错误:
public ActionResult Index()
{
return HttpNotFound();
}
鉴于我在web.config中的设置,我的错误控制器中的操作方法未被命中。我见过人们在Application_Error
方法中捕获错误,但上面的代码没有达到我的Application_Error方法。我只能看到一个空白页面,其中包含403错误状态。
为什么人们像我一样设置上面的代码然后在错误控制器中他们仍然设置错误控制器和要调用的操作方法,这不是重复工作吗?为什么我的空白页面会返回403错误?
请不要将此问题视为重复,但请帮我解决。我已经完成了几乎所有关于SO的问题。
这太令人沮丧了。
答案 0 :(得分:0)
转到App-Start文件夹中的FilterConfig.cs。 为特定类型的异常添加所需的异常类型和错误页面。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new LoggingExceptionFilter());
filters.Add(new HandleErrorAttribute() { ExceptionType = typeof(Exception), View = "Error" }, 1);
filters.Add(new HandleErrorAttribute() { ExceptionType = typeof(HttpException), View = "HttpExceptionError" }, 2);
}
在 SHARED文件夹中创建名为HttpExceptionError
的视图。