IExceptionHandler不处理UnsupportedMediaTypeException

时间:2015-07-16 23:47:12

标签: asp.net error-handling exception-handling asp.net-web-api2

我已经实现了一个异常处理程序(IExceptionHandler)。当在控制器内抛出异常时,将调用其HandleAsync方法。 但是,当一个错误的内容类型与请求一起传递并且格式化程序中抛出UnsupportedMediaTypeException时,我的处理程序不会被调用。而是返回默认错误消息

{ "Message": "The request entity's media type... "ExceptionMessage": "No MediaTypeFormatter ... ... }

我想处理所有异常。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您需要使用全局ExceptionFilterAttribute来抓住它,并过滤HttpResponseException,而不是UnsupportedMediaTypeException

E.g。

httpConfiguration.Filters.Add(new MyHttpResponseExceptionFilterAttribute());

事实证明UnsupportedMediaTypeException实际上在它到达WebApi管道时被包裹在HttpResponseException中。

HttpResponseException未被IExceptionHandler拦截,因为它旨在将HttpResponsMessage传输到客户端。 UnsupportedMediaTypeException由框架自动包装到HttpResponsMessage中,并在HttpResponseException中抛出。您在HTTP响应中看到的消息显示“UnsupportedMediaTypeException”,但实际上只是ContentHttpResponsMessage)的HttpResponseException.Response.Content