之前。net framework的时候我知道怎么做,可以catch WebException异常获得数据,但是现在用.net5.0,没有这个异常了
IAsyncExceptionFilter 没豆豆只能告诉你这么多了。
代码没有,只谈常规手段httpclient
应该说异常是有的,只是看你代码的写法
//这里应该用httpfacory,不过我这是个控制台,不想nuget httpclientfactory就直接new
HttpClient client = new HttpClient();
try
{
//假设我是get请求,后面一个参数控制,判定在收到head头就判定
var response = await client.GetAsync("", HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();//当有400这类错误,这句就会给你抛异常了
var str = await response.Content.ReadAsStringAsync();//获取正文内容
}
catch (Exception e)
{
//当有dns,超时等异常会到这里
//关键问题,我们要await的,如果是线程内部异常,不await线程直接吃了,同时需要检查非200正常回复需要让response.EnsureSuccessStatusCode去检查http的返回code
}
解决了,这样就行了
public static string GetString(string uri, int timeout = 5000, Dictionary<string, string> httpHeader = null)
{
using HttpClient http = new HttpClient();
http.Timeout = new TimeSpan(0, 0, 0, 0, timeout);
if (httpHeader != null)
foreach (var item in httpHeader)
{
http.DefaultRequestHeaders.Add(item.Key, item.Value);
}
var task = http.GetAsync(uri);
var message = task.Result;
using (message)
return message.Content.ReadAsStringAsync().Result;
}