我有以下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();
}
当我使用此对象通过swagger调用Update操作时:
{
"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) ...
我是不是遗漏了什么?
发布于 2019-05-27 02:13:27
get能工作吗?如果是,请将put上的路由更改为与get相同。
https://stackoverflow.com/questions/56315539
复制相似问题