我已经实现了一个异常处理程序(IExceptionHandler
)。当在控制器内抛出异常时,将调用其HandleAsync
方法。
但是,当一个错误的内容类型与请求一起传递并且格式化程序中抛出UnsupportedMediaTypeException
时,我的处理程序不会被调用。而是返回默认错误消息
{
"Message": "The request entity's media type...
"ExceptionMessage": "No MediaTypeFormatter ...
...
}
我想处理所有异常。我在这里缺少什么?
答案 0 :(得分:1)
您需要使用全局ExceptionFilterAttribute
来抓住它,并过滤HttpResponseException
,而不是UnsupportedMediaTypeException
。
E.g。
httpConfiguration.Filters.Add(new MyHttpResponseExceptionFilterAttribute());
事实证明UnsupportedMediaTypeException
实际上在它到达WebApi管道时被包裹在HttpResponseException
中。
HttpResponseException
未被IExceptionHandler
拦截,因为它旨在将HttpResponsMessage传输到客户端。 UnsupportedMediaTypeException
由框架自动包装到HttpResponsMessage
中,并在HttpResponseException
中抛出。您在HTTP响应中看到的消息显示“UnsupportedMediaTypeException”,但实际上只是Content
(HttpResponsMessage
)的HttpResponseException.Response.Content
。