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

 

上一篇:Android启动优化、布局优化必经之路—如何精准获取页面绘制时间


下一篇:JAVAWebform