【问题标题】:Convert HttpResponseMessage to ActionResult in Dot Net Core proxy controller action在 Dot Net Core 代理控制器操作中将 HttpResponseMessage 转换为 ActionResult
【发布时间】:2018-10-03 14:34:55
【问题描述】:

以下方法旨在接受 Http 方法和 url,针对 url 执行该方法,并将结果响应返回给调用者。它返回 ActionResult 是因为存在需要处理的错误情况。

目前,该方法只告诉调用者调用是否成功,不返回下游服务器响应的详细信息。我希望调用者从调用中接收整个响应(包括状态代码、响应正文等)。

如何将 HttpResponseMessage 转换为适合通过 ActionResult 返回的内容?

    [HttpGet(@"{method}")]
    public async Task<IActionResult> RelayRequest(string method, [FromQuery] string url)
    {

        var httpMethod = new HttpMethod(method);

        Uri uri;
        try
        {
            uri = new Uri(url);
        }
        catch (Exception e)
        {
            return BadRequest("Bad URL supplied: " + e.Message);
        }

        var request = new HttpRequestMessage(httpMethod, uri);

        try
        {
            var response = await _httpClient.SendAsync(request);
            // WANT TO RETURN (ActionResult)response HERE! <<<<<<<<<<

            if (response.IsSuccessStatusCode)
            {
                return Ok();
            }
            return BadRequest(response);
        }
        catch (Exception e)
        {
            return BadRequest(e.Message);
        }

    }

【问题讨论】:

  • 您好!你有没有机会找到答案?如果你这样做了,你能帮我发一下吗?谢谢!
  • 遗憾的是,目前还没有解决方案。当我与该客户在现场时,我会尝试参考源代码,看看我做了什么解决方法。
  • @LarryLustig 你找到答案了吗?

标签: proxy .net-core actionresult httpresponsemessage


【解决方案1】:

这将在一定程度上取决于您从 await _httpClient.SendAsync(request) 收到的响应,但您可以反序列化请求中的响应 Content 并从您的控制器返回。

例如,如果请求使用 JSON,您可以执行以下操作:

if (response.IsSuccessStatusCode)
{
    // Assuming the use of Newtonsoft.Json
    var responseBody = JsonConvert.DeserializeObject<RequestResponse>(await response.Content.ReadyAsStringAsync());

    return Ok(responseBody);
}

【讨论】:

    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多