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

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

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

另外,如果 PUT 方法可以创建和更新记录,那么使用 POST 方法有什么意义?

最佳答案

您实际上可以使用 POST 执行所有 CRUD 操作,但您不应该。因为每个 HTTP 动词都有自己的职责。

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

If HttpGet method can delete, can insert, can update and also can return value then why we use HttpPort, HttpPut and HttpDelete?

想象一个场景。

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


选择合适的方法

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

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

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

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


POST 与 PUT

POST 和 PUT 非常相似,因为它们都将数据发送到服务器,服务器需要将数据存储在某处。如果您使用 PUT 两次使用相同的参数发出相同的请求,则第二次请求将无效。这就是为什么 PUT 通常用于 Update 场景的原因。


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

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

关于c# - PUT方法可以插入、删除。那么为什么我们必须使用 POST 方法而不是 PUT/DELETE/GET 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50056514/

相关文章:

c# - 简单除法

c# - 将 odata $expand asp.net core 与 AutoMapper 一起使用时不返回扩展集合

asp.net - 为什么需要 DataBind() 方法?

c# - 此请求的授权已被拒绝。总是

c# - 在 DataTrigger 中绑定(bind) Storyboard 动画会使 XamlParser 崩溃

C# .NET - Membership.ValidateUser 在网络中返回 false;在 Visual Studio 中真实

c# - 如何在 .NET Core MVC Controller 之外进行缓存和依赖注入(inject)

c# - 将内容放在 HttpResponseMessage 对象中?

javascript - Microsoft Dynamics CRM - 用于检索实体的两个选项集属性的标签的 OData URL 格式是什么?

c# - 如何从 Web API 2 MediaTypeFormatter 强制使用 Content-Type