我发现如果在执行调用之前网络适配器被“禁用”,或者没有任何网络可用,那么HttpClient永远不会超时或抛出异常。
您将在下面找到我的代码示例。
private static async Task<string> ExecuteHttpMethod(HttpMethod httpMethod, string url, object item)
{
string json = JsonConvert.SerializeObject(item);
HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
var httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0, 0, 10);
Task<HttpResponseMessage> responseTask = null;
switch (httpMethod.Method)
{
case "GET":
{
responseTask = httpClient.GetAsync(url);
break;
}
case "POST":
{
responseTask = httpClient.PostAsync(url, httpContent);
break;
}
default:
{
throw new NotImplementedException(string.Format("{0} is not supported.", httpMethod.Method));
}
}
try
{
responseTask.Result.EnsureSuccessStatusCode();
string jsonResult = await responseTask.Result.Content.ReadAsStringAsync();
return jsonResult;
}
catch (Exception ex)
{
Debug.Write(ex.ToString());
return string.Empty;
}
}
使用await
更新1:
HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
var httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0, 0, 10);
HttpResponseMessage responseTask = null;
switch (httpMethod.Method)
{
case "GET":
{
responseTask = await httpClient.GetAsync(url);
break;
}
case "POST":
{
responseTask = await httpClient.PostAsync(url, httpContent);
break;
}
default:
{
throw new NotImplementedException(string.Format("{0} is not supported.", httpMethod.Method));
}
}
try
{
responseTask.EnsureSuccessStatusCode();
string jsonResult = await responseTask.Content.ReadAsStringAsync();
return jsonResult;
}
catch (Exception ex)
{
Debug.Write(ex.ToString());
return string.Empty;
}