使用实体框架添加带有操作的Scaffold-API控制器
向导,生成的控制器代码返回
为了行动
CreateDataAction()
// POST: api/Items
[HttpPost]
public async Task<IActionResult> PostItem([FromBody] Item item)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
_context.Item.Add(item);
await _context.SaveChangesAsync();
return CreatedAtAction("GetItem", new { id = item.Id }, item);
}
// PUT: api/Items/5
[HttpPut("{id}")]
public async Task<IActionResult> PutItem([FromRoute] int id, [FromBody] Item item)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
if (id != item.Id)
return BadRequest();
_context.Entry(item).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ItemExists(id))
return NotFound();
else
throw;
}
return NoContent();
}
我完全同意POST操作的返回值。但是,对于返回空主体的NoContent()的PUT操作,这是restfulapi的“最佳实践”吗?我的意思是,我知道它返回一个NoContent()状态码,因为主体是空的,但是如果它返回一个Ok()来表示一切正常,这难道没有更多的意义吗?在接收NoContent()状态代码时,操作是否成功似乎有点模棱两可。或者返回NoContent(),让消费应用程序知道它应该忽略主体,并假设由于没有返回错误代码,所以一切正常,这样做更正确吗?