2011-10-31 109 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的用例中有用。在任意文件上传上使用它是没有意义的。 –