Ok()
与Ok(null)
有什么区别?
Ok(null)
返回状态代码 204 ,除了标头外没有其他内容,因此我们必须以这种方式更改代码:
[HttpGet]
public IActionResult GetTest(string test)
{
MyClass result = GetMyClass(test)
if(result == null) return Ok();
return Ok(result);
}
答案 0 :(得分:1)
官方文件说
Ok()创建一个OkResult对象,该对象产生一个空的Status200OK 响应。
Ok(Object)创建一个OkObjectResult对象,该对象生成一个 Status200OK响应。
传递null时,它将创建一个null的OkObjectResult,因此您将获得204状态代码。
答案 1 :(得分:1)
HTTP状态码204
是有效的“成功”结果,它使接收者知道没有内容。实际上,这似乎很合适,但可能并非所有地方都支持。
您可以“教”(或编程)收件人以正确处理它,或者您需要应用解决方法。
如果您需要在多个地方解决此问题,则可以使用基类重载Ok()
(或更准确地说,重新定义它)以始终执行所需的操作,如下所示:
public abstract class MyBaseApiController : ApiController
{
public new IHttpActionResult Ok<T>(T content)
{
if (content == null) return base.Ok();
return base.Ok(content);
}
}
答案 2 :(得分:0)
我建议您使用NoContent(HTTPStatus 204),这意味着请求已成功执行,但未返回值或对象,并且它是用于此目的的正式状态代码,如下所示:
[HttpGet()]
public IActionResult GetTest(string test)
{
MyClass result = GetMyClass(test)
if(result != null) return Ok(result);
return NoContent();
}
希望您会发现这很有用。