zoukankan      html  css  js  c++  java
  • C#使用WebClient时,如果状态码不为200时,如何获取请求返回的内容


    一、事故现场

    使用WebClient发送请求,如果返回的状态码不是2xx或3xx,那么默认情况下会抛出异常,
    那如何才能获取到请求返回的内容呢?

    二、解决方法

    可以通过try catch获取到WebException类型的异常;

    • api接口:
       [HttpGet("test")]
       public ActionResult test()
       {
           Response.StatusCode = 401;
           return Content("test");
       }
    
    
    • 使用WebClient发送请求:
      方式一:直接捕获WebException 类型异常;
       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 异常,然后再判断异常类型;

       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 "";
           }
       }
    

  • 相关阅读:
    2-6 R语言基础 缺失值
    2-5 R语言基础 factor
    2-4 R语言基础 列表
    2-3 R语言基础 矩阵和数组
    2-2 R语言基础 向量
    【转】Python操作MongoDB数据库
    Python程序的执行原理
    数据分析的职业规划
    自定义菜单 开发 服务器繁忙
    微信自定义菜单
  • 原文地址:https://www.cnblogs.com/willingtolove/p/12078698.html
Copyright © 2011-2022 走看看