我有一个ASP.NET MVC Web应用程序,我正在尝试改进其错误处理功能.我阅读了HandleErrorAttribute基类,并希望将它与我的控制器类一起使用.但是,当我从一个用该属性修饰的控制器类中的方法抛出测试异常时,不会触发派生类中的OnException覆盖.而不是我的派生错误处理类的OnException方法被触发,我看到
XML格式的一般错误消息,并且在我的应用程序中找不到通用错误消息:
<Error>
<Message>An error has occurred.</Message>
</Error>
我究竟做错了什么?
注意我尝试将以下自定义错误元素添加到我的web.config文件中的system.web元素,如此SO帖子所示,但它没有帮助:
ASP.net MVC [HandleError] not catching exceptions
<customErrors mode="On" defaultRedirect="Error" />
这是我的HandleErrorAttribute派生类:
public class HandleControllerErrors : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
// Breakpoint set here never hit.
Exception ex = filterContext.Exception;
filterContext.ExceptionHandled = true;
var model = new HandleErrorInfo(filterContext.Exception, "Controller", "Action");
filterContext.Result = new ViewResult()
{
// Use the ErrorInController view.
ViewName = "ErrorInController",
ViewData = new ViewDataDictionary(model)
};
}
}
这是我如何装饰我的控制器类.我有一个方法强制抛出一个不在try / catch块内的异常:
[HandleControllerErrors]
public class ValuesController : ApiController
{
[Route("Api/TestException/")]
public IHttpActionResult TestException()
{
throw new InvalidCastException("Fake invalid cast exception.");
}
}
最佳答案 ApiController与MVC控制器不同,因此这可能不起作用. Web API中的错误处理处理方式略有不同.检查以下链接以获取Web API的异常处理属性:
http://www.asp.net/web-api/overview/error-handling/exception-handling