.net - HTTP Web 服务和 HTTP 响应代码

标签 .net web-services http

我正在编写一个普通的旧 XML HTTP 请求/响应服务,并且正在寻找有关如何响应调用者的建议。

鉴于响应是 XML,您会建议:

  1. 始终返回 HTTP 状态 200,并使用一种“返回代码”方法将响应成功/失败嵌入到 XML 中?例如<myResponse><returnCode></returnCode><myPayload/></myResponse>

  2. 使用 HTTP 状态代码指示成功或失败。

这可能类似于 this question .

最佳答案

Google 和 Amazon 服务仅在您的请求有效并且响应有效时才使用返回 200。

例如使用 Google Contact API

  • 如果您请求一个存在的联系人:200 + XML/Json of Contact
  • 如果您请求不存在的联系人:404 + Xml/Json 和详细信息
  • 如果您的请求格式不正确:400 + Xml/Json with Details
  • 如果您还没有发送授权 token :401 + Xml/Json with Details
  • 如果您尝试使用 Get 或 Put 插入联系人:405
  • 如果您尝试使用 Post 插入联系人:200(假设请求内容有效)
  • 如果您尝试使用 Get 或 Post 更新联系人:405
  • 如果您尝试使用 Put 更新联系人:200(假设请求内容有效)
  • 如果您尝试使用 Get、Put、Post 删除联系人:405
  • 如果您尝试使用 Delete 删除联系人:200(假设请求内容有效)

我强烈建议您不要总是返回 200。HTTP 状态代码是围绕代表请求的响应代码结果设计的。如上所示,如果您的请求不正确,那么使用 HTTP 状态代码是一个有效的解决方案。

如果您这边有问题,我建议您使用 5XX。我真的希望谷歌能做到这一点。 (有一次他们的实验性 OAuth 2.0 端点不工作,我没有抛出 503 - 服务不可用,而是收到 400 - 错误请求,这让我觉得我做错了什么......)

有关 HTTP 状态代码的说明,请查看 RFC2616 .

关于.net - HTTP Web 服务和 HTTP 响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525858/

相关文章:

amazon-web-services - SIM 800 GPRS 调制解调器,用于 HTTP GET 和 POST 到 AWS IoT 和 AWS API 网关

javascript - 为什么这个 d3.text 请求失败了?

wcf - 从另一个 WCF 服务调用时要考虑的事项

java - 完全消除对 Android 时钟的依赖并使用来自服务器的自定义时间

.net - 将 Pooled Lifestyle 与 Windsor 中的 PerWebRequest Lifestyle 集成

c# - 当键是枚举时,以 "Document"表示序列化字典

php - 响应表单 API 和在 php 中使用

javascript - 在获取 URL 之前了解 URL 的性质

c# - Return 和 finally 子句 - 不一致的行为

.net - "SAP Function OCX"的使用