【发布时间】:2014-08-04 03:31:21
【问题描述】:
我正在开发一个 Web API 2 应用程序,我目前正在尝试以统一的方式格式化错误响应(这样消费者也将知道他们可以检查哪些数据对象/结构以获取有关错误的更多信息) .这是我到目前为止所得到的:
{
"Errors":
[
{
"ErrorType":5003,
"Message":"Error summary here",
"DeveloperAction":"Some more detail for API consumers (in some cases)",
"HelpUrl":"link to the docs etc."
}
]
}
这适用于应用程序本身(即控制器内部)抛出的异常。但是,如果用户请求错误的 URI(并获得 404)或使用错误的动词(并获得 405)等,Web Api 2 会输出默认错误消息,例如
{
Message: "No HTTP resource was found that matches the request URI 'http://localhost/abc'."
}
有什么方法可以捕获这些类型的错误(404、405 等)并将它们格式化为上面第一个示例中的错误响应?
到目前为止我已经尝试过:
- 自定义 ExceptionAttribute 继承
ExceptionFilterAttribute - 自定义 ControllerActionInvoker 继承
ApiControllerActionInvoker -
IExceptionHandler(来自 Web API 2.1 的新全局错误处理功能)
但是,这些方法都无法捕获这些类型的错误(404、405 等)。关于如何/是否可以实现的任何想法?
...或者,我是不是走错了路?我是否应该只针对应用程序/用户级别的错误以我的特定样式格式化错误响应,并依赖默认的错误响应来处理 404 之类的问题?
【问题讨论】:
-
Should I only format error responses in my particular style for application/user level errors and rely on the default error responses for things like 404?...我的意见是肯定的 -
我也越来越倾向于这种方法。感谢您的出色回答/cmets。
标签: c# asp.net asp.net-web-api asp.net-web-api2