【问题标题】:Update multiple entities in one PUT request (or POST)在一个 PUT 请求(或 POST)中更新多个实体
【发布时间】:2015-05-26 21:29:53
【问题描述】:

我正在开发一个允许客户将表格信息(商家)输入网格的网站。每条记录都可以通过一个唯一的 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 控制器通常如何处理这些情况?

【问题讨论】:

标签: c# ajax entity-framework asp.net-web-api


【解决方案1】:

通常,HttpPost 用于新记录,而 HttpPut 用于更新。这是关于两者之间差异的非常好的stackoverflow答案。

PUT vs POST in REST

话虽如此,在任何一种情况下,您都可以传入一个列表:

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

    }

【讨论】:

  • 这对路由有何影响?当前的 PUT 使用来自 AJAX 的 api/merchants/id。多个 PUT 不会相互冲突吗?
  • 我会使用基于属性的路由来避免冲突。 asp.net/web-api/overview/web-api-routing-and-actions/…
  • 我根据您的示例选择了按约定路由。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
相关资源
最近更新 更多