C# 获取400或500 HTTP XML响应的XML正文
长话短说,我正在向应用程序服务器发送一个XMLHTTPPOST请求,并得到一个响应,也是以XMLHTTP的形式 我有一个可用的测试站点,它允许我以XML的形式直观地查看服务器的实际响应,但我无法通过C#代码访问XML 在我的测试用例中,从应用服务器返回的XML如下所示:C# 获取400或500 HTTP XML响应的XML正文,c#,xml,http,C#,Xml,Http,长话短说,我正在向应用程序服务器发送一个XMLHTTPPOST请求,并得到一个响应,也是以XMLHTTP的形式 我有一个可用的测试站点,它允许我以XML的形式直观地查看服务器的实际响应,但我无法通过C#代码访问XML 在我的测试用例中,从应用服务器返回的XML如下所示: <Error><Message>StringErrorMessage</Message></Error> StringErrorMessage 但是,我没有幸访问这个基本XML
<Error><Message>StringErrorMessage</Message></Error>
StringErrorMessage
但是,我没有幸访问这个基本XML来检索“StringErrorMessage”的值,以创建详细的错误报告
... More code above, all wrapped in a try{}...
_response = Serializer.DeserializeObject<T>(ObjectRequest.GetResponse().GetResponseStream());
}
catch (System.Net.WebException exceptionParameter)
{
var response = (HttpWebResponse)exceptionParameter.Response;
string webExceptionStatus = exceptionParameter.Message;
_exception = exceptionParameter;
return false;
}
。。。上面的更多代码,都包装在一个try{}。。。
_response=Serializer.DeserializeObject(ObjectRequest.GetResponse().GetResponseStream());
}
catch(System.Net.WebException异常参数)
{
var response=(HttpWebResponse)exceptionParameter.response;
字符串webExceptionStatus=exceptionParameter.Message;
_异常=异常参数;
返回false;
}
我咨询过
及
第一个链接的解决方案似乎不允许我访问作为任何响应对象属性一部分的基本XML。我几乎可以肯定的是,其中的某个地方(在响应中或异常对象中)一定有一个字节[],可以转换为char[],可以转换为字符串,可以转换为XML正文,但我一直找不到它。第二个链接的解决方案对我来说并不完全可行,因为我必须以XML的形式返回响应体,因为这可能不是一个错误,而是一个必须反序列化的对象。事情的这一面,我无法改变
如有任何建议,将不胜感激。
-伊莱
编辑:只是想澄清一下,我的基本代码在无错误的情况下工作正常,反序列化XML也很好。当我的代码遇到HTTP 400或HTTP 500错误时,从catch语句访问XML就会成为问题,因为我的代码会立即抛出异常。可以使用您拥有的
HttpWebResponse
对象的方法检索HTTP消息体(您的示例中的XML)。而且,由于它是一个流,您可以使用StreamReader
读取它,例如:
HttpWebResponse myWebResponse; // Get this from whereever you want
Stream responseStream = myWebResponse.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string niceStringForYou = reader.ReadToEnd();
…从那时起,你可以对它做任何事
如果您完全确定从服务返回的总是XML,您甚至可以使用XmlReader
直接从流中获取XML:
XmlReader foo = XmlReader.Create(responseStream);
要编辑的注释:只要您有HttpWebResponse对象,读取它的响应流(
GetResponseStream()
)就可以了。正如您在自己的代码中所指出的,您可以通过查看(HttpWebResponse)exception参数来获得HttpWebResponse。Response
工作得非常出色!谢谢,Arve-像你这样的人使S.O.成为了一个如此伟大的网站。最后,我要说的是:遗憾的是,我还不能让XmlReader工作,但所描述的第一种方法工作得非常好。不确定此时响应中会返回什么,因为当我有以下内容时:XmlReader foo=XmlReader.Create(responseStream);string contents=foo.GetAttribute(“消息”);内容保持空=*(。也许有一天我会解开这个谜。。。