HandleErrorAttribute derived class 是不是没有捕获异常?

HandleErrorAttribute derived class is not catching exceptions?

我有一个 ASP.NET MVC 网络应用程序,我正在尝试改进它的错误处理能力。我阅读了 HandleErrorAttribute 基础 class 并想将其用于我的控制器 classes。但是,当我从我的一个控制器 classes 中的一个方法中抛出一个测试异常时,它用该属性装饰, OnException 在我的派生 class 中覆盖触发。我没有触发派生错误处理 class 的 OnException 方法,而是看到 XML 格式的一般错误消息,并且一般错误消息是 not found anywhere in my app:

<Error>
    <Message>An error has occurred.</Message>
</Error>

我做错了什么?

注意我尝试将以下自定义错误元素添加到 web.config 文件中的 system.web 元素正如这个 SO post 所指出的,但是 它没有帮助:

ASP.net MVC [HandleError] not catching exceptions

<customErrors mode="On" defaultRedirect="Error" />

这是我派生的 HandleErrorAttribute class:

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)
        };
    }
} 

下面是我如何装饰我的控制器 class。我有一个方法强制抛出 nottry/catch 块内的异常。:

[HandleControllerErrors]
public class ValuesController : ApiController
{
    [Route("Api/TestException/")]
    public IHttpActionResult TestException()
    {
        throw new InvalidCastException("Fake invalid cast exception.");
    }
}

尝试将其添加到全局过滤器中:

 filters.Add(new HandleControllerErrors {View = "Error"});

ApiController 与 MVC 控制器不同,因此这可能行不通。 Web API 中的错误处理方式略有不同。检查以下 link 以获取 Web API 的异常处理属性:

http://www.asp.net/web-api/overview/error-handling/exception-handling