[英]Get XML body of a 400 or 500 HTTP XML response
簡而言之,我正在向應用服務器發送XML HTTP post請求,並且我還以XML HTTP的形式返回響應。
我有一個可用的測試站點,它允許我以XML的形式直觀地查看服務器的實際響應,但我不能按照它的方式從我的C#代碼中訪問這個XML。
在我的測試用例中從應用程序服務器返回的XML如下所示:
<Error><Message>StringErrorMessage</Message></Error>
但是,我沒有幸運訪問這個基本的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;
}
和
第一個鏈接的解決方案似乎不允許我訪問基本XML作為任何響應對象屬性的一部分。 我幾乎肯定在某處(在響應中,或在異常對象中)必須有一個byte []可以轉換為char [],它可以轉換為字符串,可以轉換為我的字符串XML體,但我一直無法找到它。 第二個鏈接的解決方案對我來說並不完全可行,因為我必須以XML的形式返回響應主體,因為它可能不是錯誤,而是必須反序列化的對象。 這方面的事情,我無法改變。
任何建議將非常感謝。 - 伊萊
編輯:只是想澄清我的基本代碼在非錯誤情況下正常工作,並且正確地反序列化XML。 當我的代碼遇到HTTP 400或HTTP 500錯誤時,從catch語句訪問XML會成為問題,因為我的代碼會立即拋出異常。
可以使用您擁有的HttpWebResponse
對象的GetResponseStream
方法檢索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)exceptionParameter.Response
來獲取HttpWebResponse。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.