我有以下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
答案 0 :(得分:0)
当我遇到这个问题时,结果实际上只是一个动作的问题 - 控制器中的其他动作都很好。有问题的方法是返回一个通用的(在我的例子中,IEnumerable<Dictionary<string, object>>
)。我通过返回一个数组来修复此问题:Dictionary<string, object>[]
。
请注意,如果启用了静态代码分析,则返回通用也会发出警告CA1006。