Sha*_*unP 5 c# http http-delete asp.net-web-api asp.net-web-api2
我有一个显示供应商产品的 API
我们的 UI 将允许用户选择各种过滤条件,并使用它一次删除大量产品。
问题是执行几千个单独的 HTTP 删除请求需要太长时间:
DELETE /api/supplier/6/products/5
DELETE /api/supplier/6/products/7
DELETE /api/supplier/6/products/8
DELETE /api/supplier/6/products/10
...
Run Code Online (Sandbox Code Playgroud)
目的是进行一次 HTTP 调用以一次删除一堆供应商产品。我可以将一个正文传递给删除,以便它包含我们要删除的所有 ID 的列表:
DELETE /api/supplier/6/products
Body:
{
"DeleteIds": "[5,7,8,10]"
}
Run Code Online (Sandbox Code Playgroud)
这很有效,直到我们把它放在我们的生产代理防火墙后面,它从 DELETE 请求中剥离了主体。
我看过 HTTP Spec RFC 2616 Fielding 等。并且它没有明确说明我不应该在 DELETE 请求中使用正文,进一步阅读表明发送带有 DELETE 请求的正文没有任何问题。
我可以控制我们的代理服务器,并且能够允许所有请求都通过正文,但我担心这可能不是最佳做法。我们可能有数千个要通过的 Id,我不希望我们使用标头或 URL 参数,因为我们可能会遇到长度限制。
所以我的问题是:使用请求正文 对多个产品进行删除的正确方法是什么?不仅仅是一个意见,而且是否有实际记录的证据来说明为什么我不应该使用 HTTP DELETE 的正文?
我应该继续
DELETE /api/supplier/6/products (Using a body)
Run Code Online (Sandbox Code Playgroud)
或者不应该将 DELETE 与正文一起使用,而是对类似的内容进行 POST
POST /api/supplier/6/products/deletemultiple
Run Code Online (Sandbox Code Playgroud)
编辑:在这个问题中有一些很好的辩论:删除一堆项目的宁静方式 它没有解决我关于使用 DELETE 请求的正文进行自定义删除操作的问题,但是有一些关于不同方式的很好的辩论可能会发生批量删除。
我已经完成了这两项操作,当我想将多个项目传递给删除操作时,我使用 aPOST并且仅将 anint[]作为参数,但我确保我调用的 URL 非常明确,因为我使用的是配置而不是约定: IE:
/api/products/DeleteAllById
如果我要删除单个项目,那么我将使用DELETE.
| 归档时间: |
|
| 查看次数: |
5069 次 |
| 最近记录: |