我使用return Ok(JsonConvert.SerializeObject(res));通过我的代码返回JSON,这工作正常,但内容类型是text/plain当我在我的API响应中使用[Produces("application/json")]时,如下所示:
return Ok(JsonConvert.SerializeObject(res));
text/plain
[Produces("application/json")]
{\"Value\":\"value1\"}
字符串我需要使用json序列化,但也需要内容类型application/json。
application/json
abithluo1#
如果你序列化一个字符串,最好使用(如Marcus所指出的)
return Ok(model)
字符串但是,使用Ok方法时的返回类型取决于您的ASP.NET Core应用程序配置的对象和安装的格式化程序(默认情况下仅安装Json Formatter,但您也可以安装Xml格式化程序)以及浏览器首选的类型。如果浏览器请求XML,而您安装了XML格式化程序,它将返回XML。如果浏览器请求json并且安装了json formatter,它将返回json。否则就退回到最合适的地方。如果你的数据已经序列化为字符串(因为它来自数据库,文件系统等),使用
Ok
return Content(jsonData, "application/json");
型如果您的数据是一个文件,只需使用
return PhysicalFile("my.json", "application/json");
型如果是小溪
return File(fileStream, "application/json");
型等等。
nbysray52#
当你手动序列化json的响应时,框架实际上认为你正在发送一个字符串作为响应,因此将向响应添加内容类型头text/plain。因此,不要手动序列化响应对象。将对象作为json发送的最简单方法是信任默认的OutputFormatter(设置为JsonOutputFormatter)来完成工作。如果控制器/方法/动作上没有定义其他内容类型,它将序列化所有传出的对象响应到json。
public IActionResult Get() { ...your logic return Ok(res); }
字符串
1zmg4dgp3#
要返回具有正确内容类型的Json,请从您的方法返回一个JsonResult,然后像这样返回一个JsonResult:
// GET: api/authors [HttpGet] public JsonResult Get() { return Json(_authorRepository.List()); }
字符串有关更多信息,请查看这篇文章:Format response data in ASP.NET Core Web API
3条答案
按热度按时间abithluo1#
如果你序列化一个字符串,最好使用(如Marcus所指出的)
字符串
但是,使用
Ok
方法时的返回类型取决于您的ASP.NET Core应用程序配置的对象和安装的格式化程序(默认情况下仅安装Json Formatter,但您也可以安装Xml格式化程序)以及浏览器首选的类型。如果浏览器请求XML,而您安装了XML格式化程序,它将返回XML。如果浏览器请求json并且安装了json formatter,它将返回json。否则就退回到最合适的地方。如果你的数据已经序列化为字符串(因为它来自数据库,文件系统等),使用
型
如果您的数据是一个文件,只需使用
型
如果是小溪
型
等等。
nbysray52#
当你手动序列化json的响应时,框架实际上认为你正在发送一个字符串作为响应,因此将向响应添加内容类型头
text/plain
。因此,不要手动序列化响应对象。将对象作为json发送的最简单方法是信任默认的OutputFormatter(设置为JsonOutputFormatter)来完成工作。如果控制器/方法/动作上没有定义其他内容类型,它将序列化所有传出的对象响应到json。
字符串
1zmg4dgp3#
要返回具有正确内容类型的Json,请从您的方法返回一个JsonResult,然后像这样返回一个JsonResult:
字符串
有关更多信息,请查看这篇文章:Format response data in ASP.NET Core Web API