C# 有没有办法从WebException中提取消息?
有没有一种方法可以提取作为HttpWebResponse可能发生的WebException的一部分发送回的文本?我可以获得所有的头信息,但如果可能的话,我希望得到一个自定义消息,返回400或401响应。我目前正在测试中处理异常,如下所示:C# 有没有办法从WebException中提取消息?,c#,httpwebresponse,C#,Httpwebresponse,有没有一种方法可以提取作为HttpWebResponse可能发生的WebException的一部分发送回的文本?我可以获得所有的头信息,但如果可能的话,我希望得到一个自定义消息,返回400或401响应。我目前正在测试中处理异常,如下所示: var ex = Assert.Throws<WebException>(() => { HttpWebResponse response = Utils.GetRawResponse(
var ex = Assert.Throws<WebException>(() =>
{
HttpWebResponse response = Utils.GetRawResponse(url);
});
Assert.Contains("401", ex.Message);
这可以工作,但没有自定义消息
顶部希望更清楚一点,我指的是屏幕截图底部的消息文本:
处理异常时,请尝试以下操作:
if(ex.Response.ContentLength>0)
{
string ResponseBody = (new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
// Do whatever you want with the ResponseBody
}
(类似于中的示例)
关键是WebException有一个响应属性:通过Gusmans提醒,我创建了一个从WebException提取响应的方法:
public static string ParseExceptionRespose(WebException exception)
{
string responseContents;
Stream descrption = ((HttpWebResponse)exception.Response).GetResponseStream();
using (StreamReader readStream = new StreamReader(descrption))
{
responseContents = readStream.ReadToEnd();
}
return responseContents;
}
该消息应该在响应正文中,您是否尝试获取响应流并将其读取为字符串?啊,流异常响应。。。duh.最后,400响应是一个正常的web响应,在WebException中有一个响应对象,具有来自服务器的真实响应是的,我看到了,只是没有考虑得到响应。可能是重复的
public static string ParseExceptionRespose(WebException exception)
{
string responseContents;
Stream descrption = ((HttpWebResponse)exception.Response).GetResponseStream();
using (StreamReader readStream = new StreamReader(descrption))
{
responseContents = readStream.ReadToEnd();
}
return responseContents;
}