在ASP.NET Core 2.0 Web Api中返回"raw"json

Mic*_*elZ 31 c# asp.net-mvc json asp.net-core-mvc

AFAIK在ASP.NET Core Web Api中返回数据的标准方法是使用IActionResult并提供例如OkObject结果.这适用于对象,但如果我以某种方式获得了JSON字符串,我只想将该JSON返回给调用者呢?

例如

public IActionResult GetSomeJSON()
{
    return Ok("{ \"name\":\"John\", \"age\":31, \"city\":\"New York\" }");
}
Run Code Online (Sandbox Code Playgroud)

ASP.NET Core在这里做的是,它接受JSON字符串,并再次将其包装到JSON中(例如它转义为JSON)

返回纯文本[Produces("text/plain")]通过提供"RAW"内容确实有效,但它也将响应的内容类型设置为PLAIN而不是JSON.我们[Produces("application/json")]在控制器上使用.

如何在没有转义的情况下将JSON作为普通的JSON内容类型返回?

注意:获取JSON字符串无关紧要,它可能来自第三方服务,或者存在一些特殊的序列化需求,因此我们希望进行自定义序列化而不是使用默认的JSON.NET序列化程序.

Mic*_*elZ 55

当然在发布问题后几分钟我偶然发现了一个解决方案:)

只需返回Content内容类型application/json...

return Content("{ \"name\":\"John\", \"age\":31, \"city\":\"New York\" }", "application/json");
Run Code Online (Sandbox Code Playgroud)

  • 您可以考虑使用 [`MediaTypeNames.Application.Json`](/sf/answers/3825555471/) 而不是 `"application/json"` (适用于 .NET Core 2.1+)。 (7认同)
  • 最好还是按照https://docs.microsoft.com/zh-CN/aspnet/core/web-api/advanced/formatting?view=aspnetcore-2.0返回Json(您的json放在这里) (2认同)

Ara*_*edi 19

在您的操作中,Ok()使用Content()方法替换,该方法允许您设置响应的内容(原始内容),内容类型和状态代码:https://docs.microsoft.com/en-us/dotnet/api/microsoft. aspnetcore.mvc.contentresult?视图= aspnetcore-2.0


Oli*_*ock 5

这对我有用,但Json()没有:

return new JsonResult(json);
Run Code Online (Sandbox Code Playgroud)