我有以下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调用更新动作时:
{
"id": 42,
"name": "TestProduct",
"description": "this is a test",
"price": 12.55,
"imageFileName": null,
"imagePath": null,
"catalogTypeId": 1,
"catalogBrandId": 2
}
我得到此错误:
应用程序抛出了一个未经治疗的例外。catalogapi | system.invalidoperationException:无路由与所提供的 值。
该项目在数据库中更新,但是执行CreateAtaction时发生错误。我的后行动也有同样的问题。我尝试使用CreateAtRoute,甚至在没有第三个参数ProductToupdate的情况下尝试了它。我可以毫无问题地调用getItembyId(/api/catalog/items/42(...
我这里有什么我缺少的吗?
有工作吗?如果是这样,请将放置的路线更改为与GET相同的路线。