.net REST API:带正文的GET请求

lf5gs5x2  于 2023-02-14  发布在  .NET
关注(0)|答案(3)|浏览(139)

我想实现一个REST API,并且需要在GET请求上有一个主体。(如这里所讨论的:HTTP GET with request body
有没有http客户端不能用get请求发送正文?fiddler可以做到,尽管消息框是红色的。

7kqas0il

7kqas0il1#

一般来说,REST中GET的思想是在URL中发送您的任何参数。正如您所包含问题的答案所表明的,这是可行的,但忽略了REST的要点,即具有一致的webbish接口。如果您想将复杂数据传递到端点,您可能需要使用POST。你的用户会期望有一个身体。我强烈建议重新考虑实现。
但是对于你真正的问题,肯定有客户端不能在GET上发送主体。我想你的客户端大多是编程的,比如说python的urlib2,虽然你可以在GET上设置主体,但这并不是模块真正的预期用途,所以你迫使程序员变得奇怪。更重要的是,REST API的思想是客户端不可知的,这就是为什么我觉得你的API设计应该在这里重新设计。

ttp71kqs

ttp71kqs2#

在GET HTTP请求中使用body是一个坏主意。是的,看起来“法律上”HTTP GET可以有body,但“事实上”你会遇到问题:
1.使用客户端框架/库。很难找到对它的支持。
1.服务器可以直接忽略GET请求的主体。而且这不是标准的方式,可能是服务器或者它的配置有问题。
1.它使你的代码,特别是在服务器端,对其他人来说不清楚,因为没有人会期望GET带有body。
你在寻找困难的方法吗?使用带主体的GET会有很多陷阱。为什么不使用其他HTTP动词呢?
例如,使用POST(或其他一些动词),而不是:
1.准备好客户端库很容易,
1.服务器或服务器配置没有问题,
1.其他人很清楚
不要寻找更难的方法:)

gdx19jrr

gdx19jrr3#

如果除了发送带正文的GET请求之外没有其他方法,请变通:

httpRequest.Method = "POST";
httpRequest.WriteBytes(bytes);
httpRequest.Method = "GET";

相关问题