【问题标题】:How to handle status codes with .NET web API?如何使用 .NET Web API 处理状态代码?
【发布时间】:2013-12-19 23:48:21
【问题描述】:

我是 .NET Web api 的新手。但我无法弄清楚返回状态代码时的最佳做法应该是什么。我已经按照creating a web api that supports crud operations 上的教程了解了它是如何工作的。

我有一个规范,其中对每个请求的响应都会返回一个状态代码以及其他数据,如果需要,我可以更改规范,但我无法确定返回状态代码并返回所有请求的数据或仅自行返回数据。

例如,如果我在未经身份验证的情况下向 GetAllCarManufacturers 发出请求,我将返回 1 的自定义 statusCode(表示未经过身份验证)和 message "User is not authenticated."。但如果我通过了身份验证,我想发回statusCode0(表示成功)和所有汽车制造商。这似乎与本教程的组织方式背道而驰,因为只有汽车制造商在没有任何额外数据的情况下被送回。这让我相信传递 statusCode 不是正确的做法。

我在示例 crud 演示中看到抛出 HttpResponseExceptions 将 HttpStatusCode 设置为某个值(参见下面的代码)。我应该使用它而不是返回我自己的状态码吗?但我担心的是它没有足够的不同状态代码来匹配我的自定义场景。

// Setting the HTTPStatusCode example.
throw new HttpResponseException(HttpStatusCode.NotFound);

【问题讨论】:

标签: asp.net-web-api


【解决方案1】:

.NET Web API 为支持 REST 接口的服务器设置 HTTP 调用约定。因此,如果您遵循约定,您应该返回 HTTP 状态代码作为指示服务器处理请求时发生了什么情况的一种方式。

HTTP 状态码是 HTTP 规范的一部分,可以是 found here

使用 HTTP 状态码有很多好处。一种是 HTTP 状态码是一个标头,因此客户端不必查看响应的内容即可了解发生了什么。

因此,如果 HTTP 客户端希望从您的界面获得 RESTful 体验,那么返回自定义状态代码(例如 0 或 1)对他们来说不是很有用。

【讨论】:

  • 好答案。唯一的问题是返回 HTTP 状态码的过程与 REST 无关。这只是正确使用 HTTP 的要求。 Web API 对于是否创建 RESTful 系统的意见绝对为零。
  • REST 不只是正确使用 HTTP 吗? :)
  • :-) 我不知道你是不是在捉弄我,但我们就说没有 REST!=HTTP。
  • 哈! :) 不,不是拖钓……在阅读了 Fielding 的论文之后,似乎 REST 只是使用 HTTP 上的超媒体构建客户端/服务器应用程序。既然是这种情况,使用正确的 HTTP 代码似乎是 REST 故事的一部分。还是我想错了?
  • 使用 HTTP 代码是 REST over HTTP 故事的一部分,是的。但这种关系并没有相反。您可以在不遵守 REST 约束的情况下执行有效的 HTTP。 Web API 专门被设计为对 HTTP 持固执己见,但并不关心您是否碰巧遵循 REST 约束。这就是为什么很少支持嵌入 Web API 的超媒体的原因之一。 Web API 不会阻止你做 REST,但它也不鼓励它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 2020-04-30
  • 2018-04-27
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
相关资源
最近更新 更多