PUT方法可以插入,删除。那么为什么我们必须使用POST方法而不是PUT / DELETE / GET方法

时间:2018-04-27 06:28:40

标签: c# asp.net asp.net-web-api asp.net-web-api2

可以使用任何GET,POST,PUT,DELETE-HTTP谓词传递一个值。我们甚至可以使用GET请求更新或删除数据,那么我们为什么要使用DELETE来删除资源?

此外,使用POST方法的重要性如果PUT方法可以创建以及更新记录吗?

3 个答案:

答案 0 :(得分:3)

您几乎可以使用POST来执行所有CRUD操作,但不应该。因为每个HTTP动词都有自己的责任。

GET应该是幂等并且安全。 GET可以缓存并在浏览器中一次又一次刷新。理想情况下,触发GET请求不应更改数据。

  

如果HttpGet方法可以删除,可以插入,可以更新也可以   返回值为什么我们使用HttpPort,HttpPut和HttpDelete?

想象一个场景。

您有一个Web API方法,它使用GET向数据库添加新条目。如果您的GET请求成为链接并且被搜索引擎抓取。您的数据库将包含重复数据。因此,在这种情况下使用POST是有意义的。

选择适当的方法

GET - 从资源请求数据,不应产生任何副作用。

POST - 方法请求服务器在数据库中创建资源,主要是在提交Web表单时。帖子是非幂等,这意味着多个请求会产生不同的效果。

PUT - 方法请求服务器更新资源或创建资源(如果资源不存在)。 Put是幂等的,这意味着多个请求将具有相同的效果。

DELETE - 方法请求从数据库中删除资源或其实例。

POST与PUT

POST和PUT非常相似,因为它们都将数据发送到服务器需要存储的服务器。如果您使用PUT两次发出相同的请求,两次使用相同的参数,则第二个请求将不起作用。这就是PUT通常用于更新方案的原因。

对于不同的Http动词也有一些限制。

  • GET参数作为URL的一部分传递,该URL很小 默认情况下,有限长度为256个字符,有些服务器支持 4000多个字符。如果要插入长记录,则必须使用POST。邮政被认为是无限的,但有一些限制因浏览器而异。
  • 如果用户按下浏览器中的“后退”按钮,则会重新执行GET。帖子没有。
  • GET由浏览器,网络中的节点,Internet服务提供商缓存。
  • 除非内容发生变化,否则GET到同一个网址必须向所有用户返回相同的结果,否则您将无法信任返回的结果中的内容。等

答案 1 :(得分:0)

从技术上讲,POST方法涵盖了所有用例。查看HTTP请求标头:

POST /service.aspx HTTP/1.1
Host: test.com&page=2

field1=value1&field2=value2

" field1的"和" field2"是POST参数," page"是一个GET参数,即使它是一个POST请求。

并非每个服务器都支持其他方法。 PUT和DELETE的原因是,从语义上讲,人们想要一个CRUD的Web请求对应物。创建新记录的请求与修改现有记录的请求之间的区别是什么?读取请求与修改记录的请求之间的区别是什么?

惯例是映射以下内容:

C - New Record - POST
R - Read Record - GET
U - Update Record - PUT
D - Delete Record - DELETE

答案 2 :(得分:0)

实际上,您应该遵循协议。因为,除非指定了动词,否则其他开发人员都不知道您的函数将做什么。只是为了消除应用程序API的歧义。否则,您肯定可以做任何事情。