【问题标题】:HttpDelete taking multiple parameters for batch deletingHttpDelete 带多个参数批量删除
【发布时间】:2019-02-01 13:08:20
【问题描述】:

我正在开发一个将由 react-admin 客户端应用程序使用的 API。根据我们的前端开发人员的说法,react-admin 支持通过发送 HTTP 删除请求来一次删除多个实体,例如

DELETE /api/Entity/Delete?filter={"ids":[1,2,3]}

显然单id请求这个方法处理的很好

[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)

但是处理包含多个 id 的请求的正确方法和路线是什么?显然,客户端请求格式仅用于演示目的,如果对此类请求有任何不言而喻的协议,则可以更改。

【问题讨论】:

    标签: c# asp.net asp.net-web-api asp.net-core react-admin


    【解决方案1】:

    您可以将参数设为数组:

    [HttpDelete("Delete")]
    public async Task<IActionResult> Delete(int[] id)
    

    那你这样称呼它:

    DELETE /api/Entity/Delete?id=1&id=2&id=3
    

    这将使用{ 1, 2, 3 } 填充id 数组。

    像您的原始示例 (?filter={"ids":[1,2,3]}) 那样将 JSON 放入查询字符串是可能的,但并不容易。你必须handle the binding yourself

    【讨论】:

      【解决方案2】:

      在提交多个id的时候,我发现最好的方式是在body中以JSON数组的形式提交。

      所以网址是/api/Entity/Delete,而正文:

      [ 1, 2, 3 ]
      

      然后您就可以收到了:

      [HttpDelete("/api/Entity/Delete")]
      public async Task<IActionResult> Delete([FromBody] int[] ids)
      {
      }
      

      【讨论】:

      • 删除动词不应该带一个身体,是吗?
      • 没错,按照惯例,URL 应该是指被删除的资源。
      猜你喜欢
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多