.NET WebAPI:抛出错误请求而不是返回它
.NET WebAPI: throwing Bad Request instead of returning it
我有一个 WebAPI 控制器,在某些情况下我想告诉调用者,内容以错误请求响应的形式存在格式错误。
我的操作方法是这样的:
[HttpPost()]
public string Post([FromBody] ComplexType content)
{
// logic ...
}
我知道我可以调用this.BadRequest
,但是由于我的操作方法有return类型的字符串,这对我帮助不大。
如何在不更改 return 类型的情况下使用上面显示的方法生成错误请求?
您可以使用 [ApiController]
属性装饰控制器,当 ModelState
无效时,它将自动添加 400 BadRequest。
The [ApiController]
attribute makes model validation errors
automatically trigger an HTTP 400 response. Consequently, the
following code is unnecessary in an action method:
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
我已经针对 return 一个字符串并且成功发送了 400 错误的 Action 进行了测试。
但是,更好的方法 (IMO) 是 return 和 IActionResult
(尽管您仍然可以使用 [ApiController]
)。然后您可以更好地控制响应,您可以执行类似于以下操作的操作:
[HttpPost()]
public IActionResult Post([FromBody] ComplexType content)
{
if (!ModelState.IsValid)
return BadRequest(); // any custom message etc
...
return Ok(yourString);
}
改成这样就可以了
[HttpPost()]
public ActionResult<string> Post([FromBody] ComplexType content)
{
// logic ...
return "string";
//or
return Ok();
//or
return BadRequest("string");
}
它仍然是 returns 字符串,但也有 400 错误
我有一个 WebAPI 控制器,在某些情况下我想告诉调用者,内容以错误请求响应的形式存在格式错误。
我的操作方法是这样的:
[HttpPost()]
public string Post([FromBody] ComplexType content)
{
// logic ...
}
我知道我可以调用this.BadRequest
,但是由于我的操作方法有return类型的字符串,这对我帮助不大。
如何在不更改 return 类型的情况下使用上面显示的方法生成错误请求?
您可以使用 [ApiController]
属性装饰控制器,当 ModelState
无效时,它将自动添加 400 BadRequest。
The
[ApiController]
attribute makes model validation errors automatically trigger an HTTP 400 response. Consequently, the following code is unnecessary in an action method:if (!ModelState.IsValid) { return BadRequest(ModelState); }
我已经针对 return 一个字符串并且成功发送了 400 错误的 Action 进行了测试。
但是,更好的方法 (IMO) 是 return 和 IActionResult
(尽管您仍然可以使用 [ApiController]
)。然后您可以更好地控制响应,您可以执行类似于以下操作的操作:
[HttpPost()]
public IActionResult Post([FromBody] ComplexType content)
{
if (!ModelState.IsValid)
return BadRequest(); // any custom message etc
...
return Ok(yourString);
}
改成这样就可以了
[HttpPost()]
public ActionResult<string> Post([FromBody] ComplexType content)
{
// logic ...
return "string";
//or
return Ok();
//or
return BadRequest("string");
}
它仍然是 returns 字符串,但也有 400 错误