gpt4 book ai didi

proxy - 在Dot Net Core代理 Controller 操作中将HttpResponseMessage转换为ActionResult

转载 作者:行者123 更新时间:2023-12-04 04:39:55 24 4
gpt4 key购买 nike

以下方法旨在接受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);
}

}

最佳答案

这将稍微取决于您从await _httpClient.SendAsync(request)收到的响应,但是您可以从请求中反序列化响应Content并从 Controller 返回它。

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

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

return Ok(responseBody);
}

关于proxy - 在Dot Net Core代理 Controller 操作中将HttpResponseMessage转换为ActionResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49982919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com