ОК () против ОК (ноль) - PullRequest
       11

ОК () против ОК (ноль)

0 голосов
/ 10 сентября 2018

В чем разница между Ok() против Ok(null)?

Ok(null) возвращает код состояния 204 без тела, кроме заголовка, поэтому мы должны изменить наш код следующим образом:

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

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

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 голосов
/ 11 сентября 2018

Я предлагаю вам использовать NoContent (HTTPStatus 204), это означает, что запрос успешно выполнен, но не вернул значение или объект, и это официальный код состояния для этой цели, например:

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

Надеюсь, вы найдете это полезным.

0 голосов
/ 10 сентября 2018

Официальная документация гласит

Ok () Создает объект OkResult, который выдает пустой Status200OK. Ответ.

Ok (Object) Создает объект OkObjectResult, который создает Status200OK ответ.

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

Когда вы передаете ноль, он создает OkObjectResult со значением ноль, поэтому вы получаете код состояния 204.

...