Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 通过API端点搜索时不使用POST的原因?_Asp.net_Json_Rest_Asp.net Web Api - Fatal编程技术网

Asp.net 通过API端点搜索时不使用POST的原因?

Asp.net 通过API端点搜索时不使用POST的原因?,asp.net,json,rest,asp.net-web-api,Asp.net,Json,Rest,Asp.net Web Api,我认为RESTful搜索的标准方法是: GET /users?parameter1=value1&parameter2=value2&parameter3=value3&parameter4=value4 但我想这样做: GET /users # Request body: { "parameter1": "value1", "parameter2": "value2", "parameter3": "value3", "paramete

我认为RESTful搜索的标准方法是:

GET /users?parameter1=value1&parameter2=value2&parameter3=value3&parameter4=value4
但我想这样做:

GET /users
# Request body:
{
    "parameter1": "value1",
    "parameter2": "value2",
    "parameter3": "value3",
    "parameter4": "value4"
}
更新:我不能以上述方式使用GET,因为有些设备不尊重GET请求的主体内容。所以我不得不用POST来代替

RESTful虔诚是我不应该使用POST将JSON数据发送到
/api/search
端点而不是使用URI的唯一原因吗

以这种方式使用POST是否存在任何技术和可证明的危险

我知道这与以下内容类似:


但我要问的是一个更具体的问题:即,除了“它不符合惯例”之外,还有什么理由认为这是一个糟糕的方法

您可以使用POST来完成此操作。HTTP规范并不禁止它

通过使用GET,您可以更准确地表示请求的特征。如果使用POST,中介无法判断您正在执行安全的幂等请求,即使您正在执行。这可能会限制您从某些中介机构获得的利益。您将无法通过使用POST利用缓存响应

如果您觉得这些好处的损失并没有超过使用更干净的URI所带来的好处,那么继续使用POST

我建议你不要在没有正当理由的情况下养成使用POST-over-GET的习惯,但是如果发送一个body是有用的,那么就这样做

还要认识到,如果6个月后,您真的希望可以缓存对搜索的响应,那么您可以始终将服务器响应更改为重定向,其中客户端使用GET重定向,GET将参数编码在位置URI中,然后您可以利用缓存的结果


重要的是,决不能使用传递不真实语义的Http方法。i、 e.切勿使用GET做不安全的事情。千万不要用PUT做非幂等的事情。但是,POST无论如何都不会约束请求,因此您可以始终使用POST。请注意,中介机构对帖子的帮助不大。

这两个例子都是
GET
方法。通常,当您想创建服务时,您只会将其发送到服务。您链接到的其他问题的第一个答案似乎为您的多参数问题提供了建议。为什么不获取/users/param1、param2、param3、param4?@user2453734“因为你不必发布信息来获取信息”——这有什么不对?除了HTTP动词中的额外字母外,这比使用GET的成本有多高?@ChrisFarmer-因为坦率地说,我想保持我的url整洁,不想处理将内容编码到URI@Darren-更新我的帖子以澄清。再次强调,“通常”并不是一个值得注意的原因。。。我正在寻找打破这一惯例可能带来的实际技术/有形后果谢谢Darrel。你能告诉我一些记录在案的措施,说明由于缓存,GET的性能如何优于POST吗?我一直在搜索,找不到任何正式的研究/延迟指标或任何东西。我很好奇我在这里失去了什么样的性能潜力。@SB2055在实际的GET和POST请求中没有性能差异,但是,如果您使用GET并且您的响应具有有效的缓存控制头,那么您将能够利用HTTP缓存,并可能实现巨大的性能提高。缓存的用处完全取决于搜索查询的性质。许多不同的用户是否执行相同的搜索?你的搜索需要很长时间吗?有很多因素。一些API使用POST to collection资源作为在集合中创建资源的一种方式,并使用服务器分配的标识符。在这里使用POST for search意味着您必须强制执行一些其他协商,如接受标题,以传达您是希望创建用户还是返回搜索。@tilgovi是的,POST有许多不同的用途。用于发现要发布到的资源的链接的链接关系类型可以传达执行发布操作的影响。