我使用HttpClient
来向API发出GET
请求,该请求应返回JSON数据,但我的请求被卡住在GetStreamAsync
。我调试过它之前,当它来到await that.GetStreamAsync(url);
我的调试器不见了。消失。我试图修复它一天,但仍然无法工作。起初,我认为这是我的代理问题,但事实并非如此。然后,我尝试使用HttpRequest
它工作正常。HttpClient.GetStreamAsync卡住
这是我的课。
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;
}
}
这是我的控制器。
[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);
如果'Get()'没有在UI线程中调用,请试试这个。这会改变什么吗? 'var stream = await that.GetStreamAsync(url).ConfigureAwait(false);' –
@QualityCatalyst我在它没有工作之前尝试。我再试一次,仍然无法工作。 – Natsathorn
你为什么不使用'GetStringAsync'来代替的特殊原因? –