C#Post方法GetResponse拋出異常后獲取狀態碼和返回的信息


先描述一下問題產生,對接華為雲接口時,由於返回請求錯誤,對方服務器返回400,415,等錯誤,然而這種異常內包含某些對方返回的信息,普通的如果post方法內未進行Response的異常處理,那么恭喜你,你悲劇了,獲取到的信息就是這些“Exception:遠程服務器返回錯誤: (500) 內部服務器錯誤”。然而這並不是我們想要的,那么就需要對這種情況進行處理了。

 public static string HttpPost(string url, string data, Hashtable ht, out int stateCode)
    {
        HttpWebRequest httpWebRequest = null;
        HttpWebResponse httpWebResponse = null;
        StreamReader streamReader = null;
        stateCode = 0;
        try
        {
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;
            httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(url));
            byte[] bs = System.Text.Encoding.UTF8.GetBytes(data);
            httpWebRequest.Method = "POST";
            httpWebRequest.ContentType = "application/json;charset=UTF-8;";
            httpWebRequest.ContentLength = bs.Length;
            if (ht != null && ht.Count > 0)
            {
                foreach (DictionaryEntry dic in ht)
                {
                    httpWebRequest.Headers.Add(dic.Key.ToString(), dic.Value.ToString());
                }
            }
            httpWebRequest.Timeout = 20000;
            httpWebRequest.GetRequestStream().Write(bs, 0, bs.Length);
            httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            streamReader = new StreamReader(httpWebResponse.GetResponseStream(), System.Text.Encoding.UTF8);
            string responseContent = streamReader.ReadToEnd();
            stateCode = (int)(httpWebResponse.StatusCode);
            streamReader.Close();
            httpWebResponse.Close();
            httpWebRequest.Abort();
            return responseContent;
        }
        catch (WebException e)
        {
            string result = string.Empty;
            using (WebResponse response = e.Response)
            {
                HttpWebResponse httpResponse = (HttpWebResponse)response;
                stateCode = (int)httpResponse.StatusCode;
                if (response == null)
                {
                    return e.ToString();
                }

                using (Stream stream = response.GetResponseStream())
                using (var reader = new StreamReader(stream))
                {
                    result = reader.ReadToEnd();
                }
            }
            if (streamReader != null) streamReader.Close();
            if (httpWebRequest != null) httpWebRequest.Abort();
            if (httpWebResponse != null) httpWebResponse.Close();
            return result;
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM