【问题标题】:Return "raw" json in ASP.NET Core 2.0 Web Api在 ASP.NET Core 2.0 Web Api 中返回“原始”json
【发布时间】:2018-01-19 08:12:55
【问题描述】:

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

例如

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

ASP.NET Core 在这里所做的是,它接受 JSON 字符串,然后再次将其包装成 JSON(例如,它转义 JSON)

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

如何将我拥有的 JSON 作为普通 JSON 内容类型返回而不被转义?

注意:如何获取 JSON 字符串并不重要,它可能来自 3rd 方服务,或者有一些特殊的序列化需求,因此我们想要进行自定义序列化而不是使用默认 JSON .NET 序列化程序。

【问题讨论】:

  • json 作为正文或参数发送?
  • @NevilleNazerane JSON 作为返回值(正文)发送,因此不涉及任何参数。

标签: c# json asp.net-mvc asp.net-core-mvc


【解决方案1】:

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

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

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

【讨论】:

  • 最好还是按照docs.microsoft.com/en-us/aspnet/core/web-api/advanced/…返回 Json(你的 json 放在这里)
  • 这非常有帮助 - 谢谢! (如果我按照上面的评论返回 Json,那么它会返回我的客户无法使用的分块。)您使用 application/json 规范返回 Content 的解决方案解决了我的问题。
  • DotNetCore 2.1 如何做到这一点? “内容”方法无法识别 - 所以我相信他们已经改变了一些东西。
  • @MC9000 你需要 ASPNetCore 2.1。 NetCore2.1 还不够。 ContentMicrosoft.AspNetCore.Mvc.ControllerBase 的函数
  • 您可以考虑使用MediaTypeNames.Application.Json 而不是"application/json"(适用于.NET Core 2.1+)。
【解决方案2】:

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

【讨论】:

  • 这很棒。我感觉这在 ASP.NET Core 2 和 ASP.NET Core 1 之间发生了变化。
  • 又一天在这里拉头发。希望看到 DNCore 2.1 的有效解决方案!
  • @MC9000 你需要 ASPNetCore 2.1。 NetCore2.1 还不够。 ContentMicrosoft.AspNetCore.Mvc.ControllerBase 的函数
【解决方案3】:

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

return new JsonResult(json);

【讨论】:

  • 随着 .NET Core 3.0 的发布 - 作为 netcoreapp3.1 - 我们现在可以使用 JsonResult 作为更清洁的解决方案,它不需要任何 Nuget 包Microsoft.AspNetCore.App 框架的一部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2023-03-22
  • 2015-08-17
  • 2017-01-17
相关资源
最近更新 更多