簡體   English   中英

獲取400或500 HTTP XML響應的XML主體

[英]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;
        }

我咨詢過C# - 從403錯誤中獲取響應正文

在Android中獲得400 HTTP響應的響應正文?

第一個鏈接的解決方案似乎不允許我訪問基本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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM