Ok()vs Ok(null)

问题描述 投票:0回答:3

Ok()Ok(null)有什么区别?

Ok(null)返回状态代码204,没有正文但是标题,因此我们必须以这种方式更改代码:

[HttpGet]
public IActionResult GetTest(string test)
{
    MyClass result = GetMyClass(test)
    if(result == null) return Ok();
    return Ok(result);
}
asp.net-mvc asp.net-core asp.net-core-webapi
3个回答
1
投票

官方文件说

Ok()创建一个OkResult对象,该对象产生一个空的Status200OK响应。

Ok(Object)创建一个产生Status200OK响应的OkObjectResult对象。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.ok?view=aspnetcore-2.1

当您传递null时,它将创建一个null的OkObjectResult,因此您将获得204状态代码。


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);
    }
}

0
投票

我建议您使用NoContent(HTTPStatus 204),这意味着请求已成功执行,但未返回值或对象,并且它是用于此目的的官方状态代码,如下所示:

[HttpGet()]
public IActionResult GetTest(string test)
{
    MyClass result = GetMyClass(test)
    if(result != null) return Ok(result);
    return NoContent();
}

希望你会发现这很有用。

© www.soinside.com 2019 - 2024. All rights reserved.