首页 新闻 会员 周边

.net core请求一个api接口响应400后怎么获取数据

0
[待解决问题]

之前。net framework的时候我知道怎么做,可以catch WebException异常获得数据,但是现在用.net5.0,没有这个异常了

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:37
提问于:2022-07-18 11:56
< >
分享
所有回答(3)
0

IAsyncExceptionFilter 没豆豆只能告诉你这么多了。

Adming | 园豆:119 (初学一级) | 2022-07-19 10:34
0

代码没有,只谈常规手段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
}

gihelo01 | 园豆:202 (菜鸟二级) | 2022-07-20 12:06
0

解决了,这样就行了

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;
    }
拖鞋王子 | 园豆:37 (初学一级) | 2022-07-29 12:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册