C# winfrom 调用rest返回错误后,如何获得body信息?

独醒子 2014-04-23 11:43:10
C#调用rest代码如下,使用正常。
但问题是当服务器返回错误(自定义错误)时候,如何获取body内的错误信息?
因无法获得 HttpWebResponse response 对象,就无法获得body信息。
烦请高人帮助修改。


public bool GetHttpsRequestStr(string sFunName, string sMethod, string sRequestData)
{
try
{
retJsonStr = "";
retErrMsg = "";
Uri address = new Uri("https://" + httpIP + ":" + httpPort.ToString() + "/" + sFunName);

StringBuilder content = new StringBuilder();
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
// 与指定URL创建HTTP请求
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://" + httpIP + Url + sFunName);
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
//创建证书文件
X509Certificate objx509 = new X509Certificate(https_crt);
//添加到请求里
request.ClientCertificates.Add(objx509);

string usernamePassword = username + ":" + password;
CredentialCache mycache = new CredentialCache();
mycache.Add(address, "Basic", new NetworkCredential(username, password));
request.Credentials = mycache;



//Header验证数据
request.Referer = header_Referer;
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
request.Headers["x-Site-ID"] = header_x_Site_ID;
request.Headers["x-Terminal-ID"] = header_x_Terminal_ID;
request.Headers["x-Signature"] = header_x_Signature;
request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
request.KeepAlive = true;
request.Method = sMethod;
request.ContentType = ContentType;

//发送body数据
if (sRequestData.Trim() != "")
{
byte[] byteData = UTF8Encoding.UTF8.GetBytes(sRequestData);
request.ContentLength = byteData.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
}

//获得请求返回
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
retJsonStr = reader.ReadToEnd();
return true;
}

}
catch (Exception ex)
{
retErrMsg=ex.Message.ToString();
return false;
}
}



firefox的rest工具显示的错误

错误后body的内容。
...全文
345 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zijiang001 2014-04-23
  • 打赏
  • 举报
回复
reader.ReadToEnd(); 就是
xdashewan 2014-04-23
  • 打赏
  • 举报
回复
你先得搞清楚错误是已什么形式返回你的,用数据方式的话就和正常返回值一样获取,如果是异常,那就要从异常里找
xdashewan 2014-04-23
  • 打赏
  • 举报
回复
我记得好像有些是放在异常的InnerException里,你可以断点在异常上打开异常的对象查看下
独醒子 2014-04-23
  • 打赏
  • 举报
回复
HttpWebResponse response = request.GetResponse() 这里返回错误,此错误是http请求返回的错误,有些是自定义错误,比如550 会返回一些自定义消息的body需要获取。 catch (WebException webex)//404,500等getresponse时会异常 { response = (HttpWebResponse)webex.Response; if (response != null) retErrMsg=response.StatusCode.ToString(); return false; } 或者用这个错误处理 但如何获得 response里的body呢?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧