Как вернуть JSON ноль из контроллера - PullRequest
0 голосов
/ 12 июня 2018

У меня есть следующее действие:

    [Route("GetNull")]
    [HttpGet]
    public IActionResult GetNull()
    {
        object value = new { Name = "John" };
        return Ok(value);
    }

Возвращает сериализованный объект:

HTTP/1.1 200 OK
Date: Tue, 12 Jun 2018 06:13:05 GMT
Content-Type: application/json; charset=utf-8
Server: Kestrel
Content-Length: 22

{
  "name": "John"
}

Если объект имеет нулевое значение, как это:

    [Route("GetNull")]
    [HttpGet]
    public IActionResult GetNull()
    {
        object value = null;
        return Ok(value);
    }

Я ожидаю, что в JSON будет возвращено значение null.Тем не менее, я получаю пустой контент, как это:

HTTP/1.1 204 No Content
Date: Tue, 12 Jun 2018 06:17:37 GMT
Server: Kestrel
Content-Length: 0

Я получаю контроллер для сериализации null в json и возвращает:

HTTP/1.1 200 OK
Date: Tue, 12 Jun 2018 06:13:05 GMT
Content-Type: application/json; charset=utf-8
Server: Kestrel
Content-Length: 4

null

1 Ответ

0 голосов
/ 12 июня 2018

ASP.NET Core имеет специальный форматер вывода, который возвращает ответ 204 - NoContent, когда вы пытаетесь вернуть ноль.Чтобы позволить вам вернуть значение NULL и получить ответ 200, вы можете удалить форматтер по умолчанию для NoContent.

В startup.cs:

services.AddMvc(options =>
{
    options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
});

Это позволит вам сделать следующее и получить200 OK ответ:

[HttpGet]
public IActionResult GetNull()
{
    object value = null;
    return Ok(value);
}

Вы должны заметить, что ASP.NET всегда будет пытаться отформатировать ответ как JSON, так как это формат ответа по умолчанию.Таким образом, заголовок ответа будет выглядеть так:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: Kestrel
Date: Tue, 12 Jun 2018 12:36:33 GMT

Важно то, что код состояния теперь 200.

Документация Microsoft здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...