构建 ASP.NET Web Api 时是不是必须使用 HTTP 协议和 HttpResponseMessage 类?

Posted

技术标签:

【中文标题】构建 ASP.NET Web Api 时是不是必须使用 HTTP 协议和 HttpResponseMessage 类?【英文标题】:Is it mandatory to use the HTTP protocol and the HttpResponseMessage class when building an ASP.NET Web Api?构建 ASP.NET Web Api 时是否必须使用 HTTP 协议和 HttpResponseMessage 类? 【发布时间】:2021-09-09 03:17:47 【问题描述】:

我正在阅读有关 ASP.NET Web API 和 REST 架构的信息。我知道使用 ASP.NET Web API 我们可以创建 RESTful 或非 RESTful 服务。

根据“统一接口”的 REST 约束,我们需要实现 HTTP 动词,如 GETPOSTPUTDELETE 等。我知道如果我们正在实现 HTTP 动词,那么我们需要使用HTTP协议与服务通信。

我从How to Implement GET Method in Web API 教程中了解了实现GET,并了解了我们如何使用HttpResponseMessage 返回HTTP 响应。

但后来我碰巧遇到了一些我们没有实现任何HttpResponseMessage 而是简单的GETPOSTPUTDELETE 的文章。见,Creating Web API Application 和 How to Create Web API in ASP.Net MVC。

我的问题:

    在没有HttpResponseMessage 的情况下实现 HTTP 动词有什么用?在 ASP.NET Web Api 中实现 GETPOSTPUTDELETE 的全部目的是我们可以创建 HTTP 响应(如我链接的第二个和第三个教程)。

    如果我们不使用HttpResponseMessage,但仍然实现GETPOSTPUTDELETE,那么我们可以说它是一个RESTFul服务吗?

    如果我们不使用 HTTP 动词实现 HttpResponseMessage,那么响应将如何在 RESTFul 服务中发回?

【问题讨论】:

附加阅读的小注释:仅仅因为 API 通过 HTTP does not mean it is RESTful 进行通信。 无论你是否使用HttpResponseMessage,结果仍然是通过HTTP传输的。 【参考方案1】:

在没有 HttpResponseMessage 的情况下实现 HTTP 动词有什么用?

如果开发人员需要严格控制如何生成 HTTP 响应,则 Web API 操作方法可以返回 HttpResponseMessage。如果没有,他们可以只返回一个包含数据的对象。

在 ASP.NET Web Api 中实现 GET、POST、PUT 和 DELETE 的全部目的是我们可以创建 HTTP 响应(如我链接的第二和第三个教程中所示)。

不,这不是目的。这些 HTTP 动词用作 HTTP 请求的一部分,以表达有关如何处理 URI 上的资源的意图。

如果我们不使用 HTTP 动词实现 HttpResponseMessage,那么响应将如何在 RESTFul 服务中发回?

在 Web API 方法中,有多种方法可以返回结果。如果方法是无效的(因此没有返回语句),那么成功的结果将有一个 HTTP 状态代码 204(无内容)。

如果您想严格控制响应的生成方式,也可以返回精心设计的 HttpResponseMessage 或 IHttpActionResult。

或者您可以返回任何其他类型的可序列化对象。结果将被序列化,并且 HTTP 响应的 HTTP 状态代码为 200(成功)。

各种返回类型都有很好的描述in the documentation。

在构建 ASP.NET Web Api 时是否必须使用 HTTP 协议和 HttpResponseMessage 类?

ASP.NET Web API 是作为 Web 服务器应用程序构建的,因此围绕 HTTP 协议构建。但如上所述,您不必创建 HttpResponseMessage 的实例。

【讨论】:

以上是关于构建 ASP.NET Web Api 时是不是必须使用 HTTP 协议和 HttpResponseMessage 类?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web API 授权和身份验证

为 ASP.Net Core Web API 项目创建要在启动时转到的索引页面

ASP.NET 帮助(使用公共 Web 服务)

ASP.NET 的 web api - 如何构建对象流

当用户未经身份验证时,ASP.NET Core 5 Web API 返回 404 代码而不是 401

ASP.NET Core Web API 身份验证