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

rqqzpn5f  于 2023-08-08  发布在  .NET
关注(0)|答案(3)|浏览(203)

我使用return Ok(JsonConvert.SerializeObject(res));通过我的代码返回JSON,这工作正常,但内容类型是text/plain
当我在我的API响应中使用[Produces("application/json")]时,如下所示:

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

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

abithluo

abithluo1#

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

return Ok(model)

字符串
但是,使用Ok方法时的返回类型取决于您的ASP.NET Core应用程序配置的对象和安装的格式化程序(默认情况下仅安装Json Formatter,但您也可以安装Xml格式化程序)以及浏览器首选的类型。如果浏览器请求XML,而您安装了XML格式化程序,它将返回XML。如果浏览器请求json并且安装了json formatter,它将返回json。否则就退回到最合适的地方。
如果你的数据已经序列化为字符串(因为它来自数据库,文件系统等),使用

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


如果您的数据是一个文件,只需使用

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


如果是小溪

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


等等。

nbysray5

nbysray52#

当你手动序列化json的响应时,框架实际上认为你正在发送一个字符串作为响应,因此将向响应添加内容类型头text/plain。因此,不要手动序列化响应对象。
将对象作为json发送的最简单方法是信任默认的OutputFormatter(设置为JsonOutputFormatter)来完成工作。如果控制器/方法/动作上没有定义其他内容类型,它将序列化所有传出的对象响应到json。

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

字符串

1zmg4dgp

1zmg4dgp3#

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

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

字符串
有关更多信息,请查看这篇文章:Format response data in ASP.NET Core Web API

相关问题