在一个PUT请求(或POST)中更新多个实体

本文关键字:更新 实体 POST PUT 一个 请求 | 更新日期: 2023-09-27 17:50:52

我在一个网站上工作,允许客户将表格信息(商家)输入网格。每条记录都可以由唯一的id标识。我试图通过我的Web API控制器启用批量更新,而不是单独的PUT请求。这些请求是通过页面上的AJAX发出的(没有发回/提交)。个别更新工作正常。

这是单独更新的代码:

// PUT api/Merchants/5
public HttpResponseMessage PutMerchant(int id, Merchant merchant)
{
    if (!ModelState.IsValid)
    {
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
    }
    if (id != merchant.MerchantId)
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
    db.Entry(merchant).State = EntityState.Modified;
    try
    {
        db.SaveChanges();
    }
    catch (DbUpdateConcurrencyException ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
    }
    return Request.CreateResponse(HttpStatusCode.OK);
}

我想为批量更新构建一个类似的PUT(类似于这样):

// PUT api/Merchants
public HttpResponseMessage PutMerchants(Merchant[] merchants)
{
    ...
}

这是可能的吗?它是否遵循RESTful约定?此外,由于一些商家应该更新和其他创建,我使用POST拆分它们吗?Web API控制器通常如何处理这些情况?

在一个PUT请求(或POST)中更新多个实体

通常,HttpPost用于新记录,HttpPut用于更新。下面是关于两者区别的一个很好的stackoverflow答案。

PUT vs POST in REST

话虽这么说,在这两种情况下你都可以传入一个列表:

   // PUT api/Merchants
    public HttpResponseMessage PutMerchants([FromBody]List<Merchant> merchants)
    {
    }