ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#Post方法GetResponse抛出异常后获取状态码和返回的信息

2021-12-28 19:34:22  阅读:247  来源: 互联网

标签:string C# bs httpWebResponse GetResponse httpWebRequest Post null streamReader


先描述一下问题产生,对接华为云接口时,由于返回请求错误,对方服务器返回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;
        }
    }

 

标签:string,C#,bs,httpWebResponse,GetResponse,httpWebRequest,Post,null,streamReader
来源: https://www.cnblogs.com/wzf-Learning/p/15742529.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有