我们希望处理403错误、404错误,所有由MySpecialDomainException
引起的错误,并为所有其他错误(包括IIS配置中的错误!)提供默认错误页面。所有错误都应返回适当的Razor视图,最好在视图之前有一个ErrorController
。例如:
public class ErrorController : Controller
{
public ViewResult NotFound () { return View(); }
public ViewResult Forbidden () { return View(); }
public ViewResult Default ()
{
var ex = ObtainExceptionFromSomewhere();
if(ex is MySpecialDomainException)
return View("MySpecialDomainException", new ErrorModel { Exception = ex });
return View("GeneralError", new ErrorModel { Exception = ex });
}
}
目前在互联网上有多种不同的方法可以实现这一点,其中一些可能已经过时了。包括:
- Controller.OnException()
- 错误筛选器
- web.config中的customErrors元素
- 在Global.asax的Application_Error中处理
Q1: 在ASP.NET MVC 5中,推荐的方式是什么来满足我们的需求?
另外,我们想要捕捉在IIS主机中发生的错误。Q2:为了防止IIS必须处理任何404,我们考虑添加一个默认路由,匹配所有可能的URL - 这样做可行吗?最好是注册IIS' 404吗?
Q3:是否可能注册一个IIS错误页面并返回到控制器,或者IIS只能处理ASPX /静态HTML?