我有以下行动:
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
答案 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();