我在代码中使用此return Ok(JsonConvert.SerializeObject(res));
返回json,这项工作正常,但内容类型为text/plain
当我在api响应中使用[Produces("application/json")]
时,就像这样:
{\"Value\":\"value1\"}
我需要使用json序列化,但也需要内容类型application/json
。
请帮助
答案 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