Ok()
和Ok(null)
有什么区别?
Ok(null)
返回状态代码204,没有正文但是标题,因此我们必须以这种方式更改代码:
[HttpGet]
public IActionResult GetTest(string test)
{
MyClass result = GetMyClass(test)
if(result == null) return Ok();
return Ok(result);
}
官方文件说
Ok()创建一个OkResult对象,该对象产生一个空的Status200OK响应。
Ok(Object)创建一个产生Status200OK响应的OkObjectResult对象。
当您传递null时,它将创建一个null的OkObjectResult,因此您将获得204状态代码。
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);
}
}
我建议您使用NoContent(HTTPStatus 204),这意味着请求已成功执行,但未返回值或对象,并且它是用于此目的的官方状态代码,如下所示:
[HttpGet()]
public IActionResult GetTest(string test)
{
MyClass result = GetMyClass(test)
if(result != null) return Ok(result);
return NoContent();
}
希望你会发现这很有用。