ExceptionFilterAttribute未被调用

时间:2015-09-09 12:46:22

标签: asp.net-web-api2

我有以下WebApiConfig。

public static class WebApiConfig
    {

        public static void Register(HttpConfiguration config)
        {
            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.EnableSystemDiagnosticsTracing();
       //     config.MessageHandlers.Add(new TokenValidationHandler());
       //     config.MessageHandlers.Add(new LoggingHandler());
             config.Filters.Add(new ApiCustomExceptionHandler());
        }

我实现了ExceptionFilterAttribute,如下所示

public class ApiCustomExceptionHandler : ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext context)
        {

        var exceptionType = context.Exception.GetType();
        if (exceptionType == typeof(UnauthorizedAccessException))
        {
            context.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
        }

我的控制器因此声明:

 [ApiCustomExceptionHandler]
    public class UserManagementController : ApiController
   {
....
}

当我抛出UnAuthorizedAccessException时,问题是 OnException 永远不会被调用。知道为什么会这样吗?

-Arun

1 个答案:

答案 0 :(得分:0)

当我遇到这个问题时,结果实际上只是一个动作的问题 - 控制器中的其他动作都很好。有问题的方法是返回一个通用的(在我的例子中,IEnumerable<Dictionary<string, object>>)。我通过返回一个数组来修复此问题:Dictionary<string, object>[]

请注意,如果启用了静态代码分析,则返回通用也会发出警告CA1006