CreateAtAction 在 Web API 中返回 ASP.Net "No route matches the supplied values"



我有以下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相同的路线。

相关内容

最新更新