.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 错误