使用WebClient发送请求,若是返回的状态码不是2xx或3xx,那么默认状况下会抛出异常,
那如何才能获取到请求返回的内容呢?ui
能够经过try catch获取到WebException类型的异常;编码
[HttpGet("test")] public ActionResult test() { Response.StatusCode = 401; return Content("test"); }
public static string WebClientGetRequest(string url) { try { using (WebClient client = new WebClient()) { //设置编码格式 client.Encoding = System.Text.Encoding.UTF8; //获取数据 var result = client.DownloadString(url); return result; } } catch (WebException ex) { using (HttpWebResponse hr = (HttpWebResponse)ex.Response) { int statusCode = (int)hr.StatusCode; StringBuilder sb = new StringBuilder(); StreamReader sr = new StreamReader(hr.GetResponseStream(), Encoding.UTF8); sb.Append(sr.ReadToEnd()); Console.WriteLine("StatusCode:{0},Content:{1}", statusCode, sb);// StatusCode:401,Content:test } return ""; } }
方法二:捕获 Exception 异常,而后再判断异常类型;url
public static string WebClientGetRequest(string url) { try { using (WebClient client = new WebClient()) { //设置编码格式 client.Encoding = System.Text.Encoding.UTF8; //获取数据 var result = client.DownloadString(url); return result; } } catch (WebException ex) { if (ex.GetType().Name == "WebException") { WebException we = (WebException)ex; using (HttpWebResponse hr = (HttpWebResponse)we.Response) { int statusCode = (int)hr.StatusCode; StringBuilder sb = new StringBuilder(); StreamReader sr = new StreamReader(hr.GetResponseStream(), Encoding.UTF8); sb.Append(sr.ReadToEnd()); Console.WriteLine("StatusCode:{0},Content:{1}", statusCode, sb);// StatusCode:401,Content:test } } return ""; } }