2011-10-31 55 views
15

所以我有一個通過POST方法接受XML的頁面。下面的代碼的小位:解碼輸入流

if (Request.ContentType != "text/xml") 
     throw new HttpException(500, "Unexpected Content Type"); 

StreamReader stream = new StreamReader(Request.InputStream); 
string x = stream.ReadToEnd(); // added to view content of input stream 

XDocument xmlInput = XDocument.Load(stream); 

我得到了一個錯誤,所以我轉換的流爲一個字符串,只是爲了看看,如果一切都被正確地發送。當我看了看內容,它是這樣的:

%3C%3fxml +版本%3D%271.0%27 +編碼%3D%27UTF 8%27%3F%3E%0D%0A

所以我想我需要解碼流。唯一的問題是我不知道如何在流上使用HtmlDecode,並且仍然保持它作爲StreamReader對象。

有沒有辦法做到這一點?

+0

它看起來像XML已被編碼了額外的時間,而不僅僅包含XML。什麼是數據發佈,以及它應該做什麼? –

+0

看起來不是html編碼,而是url編碼的字符串。主要問題 - 爲什麼?你是否控制發佈xml的一面? –

+0

@invisible - 不,我不控制發佈xml的那一面 – Steven

回答

23

顯然,客戶端正在將內容發送爲URL編碼的XML。所以你需要解碼這樣的內容:

StreamReader stream = new StreamReader(Request.InputStream); 
string x = stream.ReadToEnd(); 
string xml = HttpUtility.UrlDecode(x); 

XDocument xmlInput = XDocument.LoadXml(xml); 

無論如何,問題可能是在客戶端...爲什麼它這樣編碼XML?

+0

@Jcorretjer我在回答中提出的建議只在OP的用例中有用。在任意文件上傳上使用它是沒有意義的。 –