【问题标题】:.NET Core 3.1 WebApi - Passthrough JSON response from another WebApi.NET Core 3.1 Web Api - 传递来自另一个 Web Api 的 JSON 响应
【发布时间】:2020-04-23 17:15:55
【问题描述】:

我有以下设置:

  • WebApi #1 - 通过 OkResult 类返回 JSON
  • WebApi #2 - 通过 OkResult 类返回 JSON

WebApi #2 需要调用 WebApi #1 并简单地通过其 OkResult 将 JSON 结果传回。我遇到的问题是,如果我这样做,我最终会在响应中得到转义的 JSON:

"{\"id\":1,\"key\":\"value\",\"key\":\"value\",\"key\":\"value\",\"key\":\"value\"}"

什么是通过此回报的最佳方式?

更新:

这是对 WebApi #1 进行 API 调用的代码:

public async Task<string> Get(string uri)
    {
        try
        {
            string responseBody = await _client.GetStringAsync(uri);
            return responseBody;
        }
        catch (HttpRequestException ex)
        {
            _logger.LogError(ex.Message);
            return null;
        }
    }

这是 WebApi #2 中的返回:

public async Task<IActionResult> Get(string data)
    {
        var uri = String.Format(Environment.GetEnvironmentVariable("ENDPOINT"), data);
        var result = await _client.Get(uri);
        return Ok(result);
    }

【问题讨论】:

  • 您必须提供更多关于如何进行传递的代码。很可能您正在对已经是 json 的字符串再执行一次 JsonSerialization,这就是您得到这个的原因。您只需要获取一个字符串并将其作为带有适当标题的字符串进一步发送
  • 已添加到帖子中。谢谢!
  • 因此在该代码中,控制器进行“_client.Get(uri)”调用,该调用将返回“responseBody”,这是从 WebApi #1 返回的 OkResult。所以我看到发生的事情是,控制器中的 OkResult 再次对其进行序列化,这导致了转义的 JSON。

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


【解决方案1】:

你需要这样做:

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

【讨论】:

  • 所以唯一的问题是,我真的想使用内置的响应类型,如 Ok、BadRequest、Problem 等。我需要能够发回状态码以及JSON。
  • 好的,所以如果我新建一个 ContentResult 类,我可以设置所有这些。我认为那会为我做。谢谢!
  • 没问题,我在这里找到了更多细节:stackoverflow.com/questions/48336680/…。显然这些普通的总是假设他们正在返回 Json,如果他们确实返回 json 输入字符串必须被转义,否则它不会是一个有效的 json,它并不知道那里已经有 json
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多