gpt4 book ai didi

c# - HttpClient.GetStreamAsync 卡住了

转载 作者:行者123 更新时间:2023-11-30 23:11:11 27 4
gpt4 key购买 nike

我使用 HttpClient 向 API 发出一个 GET 请求,该请求应该返回我的 JSON 数据,但我的请求停留在 GetStreamAsync。我之前调试过 await that.GetStreamAsync(url); 我的调试器不见了。消失。我尝试修复它一天,但仍然无法正常工作。起初,我认为这是我的代理问题,但事实并非如此。然后,我尝试使用 HttpRequest 它工作正常。

这是我的类(class)。

public async Task<bool> RequestToApi(string response)
{
HttpClientHandler httpClientHandler = new HttpClientHandler();
if (_cdnResProxy.Value.Length > 0 && _cdnResPort.Value > 0)
{
httpClientHandler.Proxy = new WebProxy(string.Format("{0}:{1}",
_cdnResProxy.Value,
_cdnResPort.Value))
{ BypassProxyOnLocal = true };
}

//try to remove proxy here already but still not work

using (var hClient = new HttpClient(httpClientHandler))
{
hClient.DefaultRequestHeaders.ExpectContinue = false;
var result = await hClient.Get<ResponseObj>(
$"https://www.example.com/api/somepath?something={someValue}");

return result.success;
}
}

public static class HttpClientExtension
{
public static async Task<T> Get<T>(this HttpClient that, string url)
{
var stream = await that.GetStreamAsync(url); //stuck here
JsonSerializer serializer = new JsonSerializer();
T data;
using (StreamReader streamReader = new StreamReader(stream))
{
data = (T)serializer.Deserialize(streamReader, typeof(T));
}

return data;
}
}

这是我的 Controller 。

    [HttpPost]
[SwaggerVisible]
[SwaggerOperation("SignIn_VerifyCaptchaAction")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(bool))]
public bool RecaptchaSubmit(string response)
{
return _service.RecaptchaSubmit(response).Result;
}

这是我的Http包版本:

<package id="System.Net.Http" version="4.3.2" targetFramework="net462" />

这是我已经尝试过的方法。

var stream = await that.GetStreamAsync(url).ConfigureAwait(false);

最佳答案

因为@UltimaWeapon 是对的,您没有使用异步 Controller ,因此一切都同步运行。您必须尽可能等待所有异步调用以避免线程阻塞。

[HttpPost]
[SwaggerVisible]
[SwaggerOperation("SignIn_VerifyCaptchaAction")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(bool))]
public async Task<bool> RecaptchaSubmit(string response)
{
return await _service.RecaptchaSubmit(response);
}

虽然我不知道在 Controller 中返回 bool。 AFAIK 返回 ActionResult 是常用的。由于我不使用它,因此无法对此发表评论。

关于c# - HttpClient.GetStreamAsync 卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44877774/

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