在.NET Core中添加Content-Type JSON标头

时间:2018-05-22 08:42:34

标签: .net json asp.net-core

我在代码中使用此return Ok(JsonConvert.SerializeObject(res));返回json,这项工作正常,但内容类型为text/plain

当我在api响应中使用[Produces("application/json")]时,就像这样:

{\"Value\":\"value1\"}

我需要使用json序列化,但也需要内容类型application/json

请帮助

3 个答案:

答案 0 :(得分:3)

当您手动将响应序列化为json时,框架实际上认为您正在发送一个字符串作为响应,因此会将内容类型标题text/plain添加到响应中。因此,请勿手动序列化响应对象。

将对象作为json发送的最简单方法就是信任设置为JsonOutputFormatter的默认OutputFormatter来完成工作。如果控制器/方法/操作上没有定义其他内容类型,它会将所有传出对象响应序列化为json。

public IActionResult Get()
{
    ...your logic
    return Ok(res);
}

答案 1 :(得分:2)

如果您序列化一个字符串,最好使用(如Marcus所指)

return Ok(model)

使用Ok方法时的返回类型取决于您的ASP.NET Core应用程序的配置对象和安装的格式化程序(默认情况下只有Json Formatter,但您也可以安装Xml格式化程序)以及哪种类型浏览器更喜欢。如果浏览器请求xml并且您安装了xml格式化程序,它将返回xml。如果浏览器请求安装了json和json格式化程序,它将返回json。否则回到最合适的诉讼。

如果您的数据已经被序列化为字符串(因为它来自数据库,文件系统等),请使用

return Content(jsonData, "application/json");

如果您的数据是文件,请使用

return PhysicalFile("my.json", "application/json");

如果是流

return File(fileStream, "application/json");

答案 2 :(得分:0)

要返回具有正确内容类型的Json,请从您的方法返回一个JsonResult,然后返回如下的JsonResult:

// GET: api/authors
[HttpGet]
public JsonResult Get()
{
    return Json(_authorRepository.List());
}

有关详细信息,请查看以下文章:Format response data in ASP.NET Core Web API