控制器操作错误地返回状态代码200而不是204

时间:2017-09-19 10:26:18

标签: c# asp.net-core asp.net-core-mvc asp.net-core-1.1

我正在开发基于Asp.net Core MVC 1.1.3的REST-Api如果一个动作没有返回类型我的客户端库需要一个状态代码204(没有内容) 这是我的行动:

[HttpPut]
[Route("")]
public async Task Update([FromBody]ApiResourceUpdateDto dto)
{
    await _repo.Update(dto.Name, dto.Enabled, dto.DisplayName, dto.Description);
}

由于此方法不返回任何内容,因此应返回状态代码204(无内容)。但是,如果我测试这个方法,虽然正文是空的,但我会得到200的状态代码。我也尝试切换到void而不是Task,但它没有改变任何内容。

Request URL:http://localhost:5000/api/apiresource
Request Method:PUT
Status Code:200 OK
Remote Address:[::1]:5000
Referrer Policy:no-referrer-when-downgrade

这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:3)

NoContentResult返回HTTP 204状态代码。自重写以来,由于两个框架与先前版本的合并,您必须对返回的内容更加明确。控制器可以是web api或普通MVC,因此无法自动推断它是哪种类型。

[HttpPut]
[Route("")]
public async Task<IActionResult> Update([FromBody]ApiResourceUpdateDto dto) {
    await _repo.Update(dto.Name, dto.Enabled, dto.DisplayName, dto.Description);
    return new NoContentResult();
}

或者您甚至可以使用return NoContent();