2011-10-31 14 views
15

Quindi ho una pagina che accetta XML tramite un metodo POST. Ecco un piccolo pezzo di codice:Decodifica di un flusso di input

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

mi è stato sempre un errore, così ho trasformato il flusso in una stringa, solo per vedere se tutto era stato inviato correttamente. Quando ho guardato il contenuto, sembrava questo:

% 3c% 3fxml + versione% 3d% 271,0% 27 + codifica% 3d% 27UTF-8% 27% 3f% 3e% 0d% 0a

Quindi penso di aver bisogno di decodificare il flusso. L'unico problema è che non so come posso usare HtmlDecode nello stream e mantenerlo come oggetto StreamReader.

C'è un modo per farlo?

+0

Sembra che l'XML sia stato codificato in un momento aggiuntivo, anziché solo contenere l'XML. Cosa sta postando i dati e cosa dovrebbe * fare *? –

+0

Sembra che non sia la codifica html, ma la stringa con codifica url. Domanda principale: perché? Controllate il lato che pubblica un xml? –

+0

@invisible - no, non controllo il lato che pubblica xml – Steven

risposta

23

Apparentemente il client sta inviando il contenuto come XML con codifica URL. Quindi è necessario per decodificare il contenuto in questo modo:

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

XDocument xmlInput = XDocument.LoadXml(xml); 

In ogni caso, il problema è probabilmente sul lato client ... perché è la codifica del XML in questo modo?

+0

@Jcorretjer ciò che ho suggerito nella mia risposta è utile solo nel caso d'uso dell'OP. L'utilizzo di questo su un caricamento arbitrario di file non ha senso. –

Problemi correlati