2011-10-31 10 views
15

Tengo una página que acepta XML mediante un método POST. He aquí un pequeño fragmento de código:Decodificación de una secuencia de entrada

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); 

que estaba recibiendo un error, por lo que convierte la corriente en una cadena, sólo para ver si todo estaba siendo enviado correctamente. Cuando miraba el contenido, parecía que esta:

% 3c% 3fxml + versión%% 3d 271,0% 27 + codificación% 3d% 27UTF-8% 27% 3f% 3e% 0d% 0a

Así que supongo que necesito decodificar la transmisión. El único problema es que no sé cómo puedo usar HtmlDecode en la transmisión y aún así mantenerlo como un objeto StreamReader.

¿Hay alguna manera de hacer esto?

+0

Parece que el XML se ha codificado con un tiempo extra, en lugar de solo contener el XML. ¿Qué está publicando la información y qué * debería * estar haciendo? –

+0

Parece que no es una codificación html, sino una cadena codificada en url. Pregunta principal: ¿por qué? ¿Controlas el lado que publica un xml? –

+0

@invisible - no, no controlo el lado que publica el xml – Steven

Respuesta

23

Aparentemente, el cliente está enviando el contenido como XML codificado en URL. Así que hay que decodificar el contenido de la siguiente manera:

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

XDocument xmlInput = XDocument.LoadXml(xml); 

De todos modos, el problema es, probablemente, en el lado del cliente ... ¿por qué se codifica el XML de esta manera?

+0

@Jcorretjer lo que sugerí en mi respuesta solo es útil en el caso de uso del OP. Usar esto en una carga arbitraria de archivos no tiene sentido. –

Cuestiones relacionadas