如何从控制器返回JSON null

时间:2018-06-12 06:14:14

标签: asp.net-core

我有以下行动:

  ID      Name1     Name2      Name3     Name4    Name5   Flag
   1       abc       NA         der       def      NA     Partial
   2       NA        NA         NA        NA       NA     No
   3       abc       def        rtg       der      ret    Yes
   4       rty       NA         NA        NA       NA     Partial

返回序列化对象:

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

如果对象设置为null,则如下所示:

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"
}

我希望返回JSON中的null。但是,我得到这样的空内容:

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

我是否让控制器将null序列化为json并返回:

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

2 个答案:

答案 0 :(得分:1)

ASP.NET Core有一个特定的输出格式化程序,当您尝试返回null时返回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文档为here

答案 1 :(得分:0)

Microsoft 所述,您可以从控制器返回空的 JsonResult。

例如

return Json(null);

不过,更好的方法可能是返回 OK 状态,如果这就是您所需要的。

return Ok();