如何在Web API的void方法中抛出错误(Bad Request)
public async Task UpdateRecord([FromBody] UpdateRecord model)
{
try
{
await _recordService.UpdateRecord(model);
}
catch (Exception ex)
{
var message = new NetHttp.HttpResponseMessage(HttpStatusCode.BadRequest);
message.Content = new NetHttp.StringContent(ex.Message);
throw new WebHttp.HttpResponseException(message);
}
}
在swagger中显示为500。但是我已经提到了400 -错误请求
因为你抛出了一个异常,它将永远是500(如果你没有在其他地方捕捉到它)。
如果你想要一个错误的请求,那么
public async Task<IHttpActionResult> UpdateRecord([FromBody] UpdateRecord model)
{
try
{
await _recordService.UpdateRecord(model);
}
catch (Exception ex)
{
return BadRequest(/*Optional message*/);
}
return Ok(returnData);
}
我建议你重新考虑你的策略:
- 未处理的异常不应该在应用程序中正常发生。如果发生这种情况,那么500族是返回的正确Http代码。
- 您可以看到
BadRequest
期望一些验证错误。虽然不是强制性的,但此错误代码假定在格式方面存在某种类型的错误输入数据,而不是业务逻辑。
你可以在没有验证消息的情况下使用
return BadRequest();
在得到Athanasios Kataras的建议后,我更新如下
public async Task<IActionResult> UpdateRecord([FromBody] UpdateRecord model)
{
try
{
await _recordService.UpdateRecord(model);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
return Ok(); // Not passing any value inside
}