Asp.net web api 返回Web API中的错误

Asp.net web api 返回Web API中的错误,asp.net-web-api,Asp.net Web Api,我正在使用ASP.NETWebAPI开发一个全新的RESTAPI。来自WCF的背景,我被为我的API创建“错误契约”所吸引 在本例中,我不是说将未处理的异常返回给客户机。相反,我将重点放在错误上,比如客户端不正确地使用API——特别是那些客户端可以自动创建这些错误并重新提交请求的错误 我发现的大多数示例都返回了一个字符串,通常是通过抛出HttpResponseException,或者至少做一些事情使构建信息性错误字符串的过程更加自动化: 我正在考虑创建一个HttpResponseExceptio

我正在使用ASP.NETWebAPI开发一个全新的RESTAPI。来自WCF的背景,我被为我的API创建“错误契约”所吸引

在本例中,我不是说将未处理的异常返回给客户机。相反,我将重点放在错误上,比如客户端不正确地使用API——特别是那些客户端可以自动创建这些错误并重新提交请求的错误

我发现的大多数示例都返回了一个字符串,通常是通过抛出HttpResponseException,或者至少做一些事情使构建信息性错误字符串的过程更加自动化:

我正在考虑创建一个HttpResponseException,传入一个HttpResponseMessage,其内容设置为我的特定错误契约类型

不过,我的API也大量使用了自动模型验证,这些模型验证错误以完全不同的结构返回

那么,我应该强制将“错误”转换为与模型验证响应相同的格式吗?这里的最佳实践是什么


最后,我的API将公开json、xml和协议缓冲区的格式选项。因此,我确实需要确保我的策略独立于格式化程序。

我不久前写了一篇关于Web API如何处理错误的博文:

它应该有助于回答你的问题。基本上,您有两种选择:

  • 为错误响应定义自己的类。在这种情况下,您希望确保类可以序列化为XML、JSON等。然后可以使用
    Request.CreateResponse(statusCode,myErrorInstance)
    发回自定义错误。您可能还需要一种将无效模型状态转换为特定错误类型的方法

  • 使用Web API的错误响应类型:HttpError。HttpError本质上是一个
    字典
    ,您可以在其中向HttpError添加自己的键和值。优点很多-您的错误看起来像Web API错误,您知道它适用于所有格式化程序,并且您可以避免必须从异常和无效模型状态定义转换的工作。使用HttpError最简单的方法是调用
    Request.CreateErrorResponse()


  • 在这种情况下,你可以做任何你想做的事情。web api使用者的最佳体验是确保使用友好的错误消息,在这种情况下,您将希望将错误序列化为格式良好的json对象。下面的博文提供了一些使用案例和我提出的解决方案:

    您能提供更多关于HttpError的信息吗?返回它的最佳方式是什么?这仍然是返回错误的标准方法吗?我几乎找不到关于它的信息-thx。它似乎也不适用于IHttpActionResult。