.NET Core Web API向客户端发送错误请求

18

我正在编写一个位于 .NET Core Web 项目中的 Web API。

// POST: api/Companies
[HttpPost]
public void Post([FromBody]string value)
{
    if (string.IsNullOrEmpty(value))
    {
        // inform the client that request is incorrect.
    }
}

我希望能够告知客户这是一个错误的请求,我找到了很多文章,但都是1-2年前的,我相信自那时以来有很多变化。所以想知道这个问题的最佳解决方案。


1
你肯定可以找到最近的ASP.NET Core文档。其中有很多内容展示了如何向客户端返回操作结果。我只花了不到30秒的时间,在搜索“asp.net core return bad request”后就找到了一些相关信息,比如这个。这真的表明了在提问之前你没有做基本的研究。 - mason
1
返回 BadRequest(YourObject); - marcusturewicz
不,它没有改变,API函数在HTTP协议上运行,坏请求及其状态代码也没有改变。 - Afzaal Ahmad Zeeshan
3个回答

25

BadRequest方法声明在ControllerBase类中,将创建一个400响应消息。它已经存在多年(新版本,几乎相同的实现),非常可靠,因此请使用它。

[HttpPost]
public IActionResult Post([FromBody]string value)
{
    if (string.IsNullOrEmpty(value))
    {
        return BadRequest("request is incorrect");
    }
}

把响应返回会不会更好呢?同时也要改变函数的返回类型。 :-) - Afzaal Ahmad Zeeshan
@AfzaalAhmadZeeshan 感谢您指出,已经更新了答案 :) - Marcus Höglund
我也可以在 HttpGet 中使用这个吗? - Enrico
1
@Enrico 是的,你可以 :) - Marcus Höglund

2
推荐的做法是将您的方法签名更改为:
[HttpPost]
public IHttpActionResult Post([FromBody]string value)
{
    if (string.IsNullOrEmpty(value))
    {
        return BadRequest("Value must be passed in the request body.");
    }
    else
    {
        return Ok("Request was correct");
    }
}

通过返回 IHttpActionResult,您可以调用 Ok(...) 方法BadRequest("reason") 和其他内置类型,就像您可以在 HttpActionResult 文档页面 上找到的那样。


0
如果你想告诉客户这是一个错误的请求,那么你需要在方法签名中做一些修改。
[HttpPost]
public IActionResult Post([FromBody]string value)
{
    if (string.IsNullOrEmpty(value))
    {
        return BadRequest("Invalid input data");
    }else{
//return the result of the action

}
}

你的控制器类必须继承自ControllerBase类,并且包含一个BadRequest方法,该方法返回400响应。"Bad Request"是一个HTTP响应状态码,表示服务器由于客户端错误而无法处理请求。
IActionResult - 在ASP.NET Core中,你可以使用IActionResult来返回不同类型的操作结果,包括视图、JSON、状态码等等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接