我有以下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)...
这里有什么我想念的吗?
答案 0 :(得分:0)
得到工作吗?如果是这样,则将put上的路由更改为与get相同。