CreateAtAction返回ASP.Net Web API中的“没有路由匹配提供的值”

时间:2019-05-26 16:49:34

标签: c# asp.net api .net-core

我有以下Put方法更新我的商品:

[HttpPut]
[Route("items")]
public async Task<IActionResult> UpdateProduct([FromBody] CatalogItem productToUpdate)
{
       var catalogItem = await _catalogContext.CatalogItems.SingleOrDefaultAsync(i => i.Id == productToUpdate.Id);
       if (catalogItem == null) return NotFound(new { Message = $"Item with id {productToUpdate.Id} not found." });

       catalogItem = productToUpdate;
       _catalogContext.CatalogItems.Update(catalogItem);
       await _catalogContext.SaveChangesAsync();

       return CreatedAtAction(nameof(GetItemById), new { id = productToUpdate.Id }, productToUpdate);
}

以及以下GetItemBy ID操作:

[HttpGet]
[Route("items/{id:int}")]
public async Task<IActionResult> GetItemById(int id)
{
       if (id <= 0)
       {
           return BadRequest();
       }
       var item = await _catalogContext.CatalogItems.SingleOrDefaultAsync(c => c.Id == id);
       if (item != null)
       {

           return Ok(item);
       }
       return NotFound();
}

当我通过招摇来调用此对象的更新操作时:

{
  "id": 42,
  "name": "TestProduct",
  "description": "this is a test",
  "price": 12.55,
  "imageFileName": null,
  "imagePath": null,
  "catalogTypeId": 1,
  "catalogBrandId": 2
}

我收到此错误:

  

应用程序引发了未处理的异常。 catalogapi |   System.InvalidOperationException:没有路由与提供的路由匹配   值。

该项目已在数据库中更新,但是执行CreatedAtAction时发生错误。我在POST操作中遇到相同的问题。我尝试使用CreatedAtRoute,甚至尝试了没有第三个参数productToUpdate的情况。我可以毫无问题地调用GetItemById(/ api / Catalog / items / 42)...

这里有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

得到工作吗?如果是这样,则将put上的路由更改为与get相同。