2011-10-31 16 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 +符号%の3次元%の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のユースケースでのみ有用です。これを任意のファイルアップロードで使用することは意味がありません。 –

関連する問題