2013-09-04 14 views
10

Ho un'API Web che legge l'XML e lo passa al modello appropriato per l'elaborazione.Come leggere XML da API Web ASP.NET?

Come posso ricevere quell'XML in arrivo? Quale tipo di dati dovrei usare?

Devo utilizzare StreamReader, StreamContent o XmlDocument o altro?

risposta

12

L'API Web ASP.NET utilizza la negoziazione del contenuto per deserializzare automaticamente una richiesta HTTP in entrata in una classe del modello. Immediatamente, questo funzionerà con qualsiasi messaggio XML, JSON o wwww-form-urlencoded.

public class ComputerController : ApiController 
{ 
    public void Post(ComputerInfo computer) 
    { 
     // use computer argument 
    } 
} 

creare una classe modello che associa le proprietà del XML.

public class ComputerInfo 
{ 
    public string Processor { get; set; } 
    public string HardDrive { get; set; } 
} 

Questo XML in entrata sarebbero deserializzata per idratare il parametro del computer nel metodo Post.

<ComputerInfo> 
    <Processor>AMD</Processor> 
    <HardDrive>Toshiba</HardDrive> 
</ComputerInfo> 

Se per qualsiasi motivo si desidera leggere e analizzare il codice XML in entrata manualmente, è possibile farlo in questo modo

string incomingText = this.Request.Content.ReadAsStringAsync().Result; 
XElement incomingXml = XElement.Parse(incomingText); 
+0

Uso ReadAsStreamAsync e carico è una scelta migliore rispetto ReadAsString e Parse. –

+0

@DarrelMiller Perché è quello? – Despertar

+0

Poiché ReadAsString può scegliere una codifica di stringa diversa da quella definita nel documento XML. –

4

Qualsiasi contenuto in entrata può essere letto come un flusso di byte e quindi elaborato come richiesto.

public async Task<HttpResponseMessage> Get() { 

    var stream = await Request.Content.ReadAsStreamAsync(); 

    var xmlDocument = new XmlDocument(); 
    xmlDocument.Load(stream); 

    // Process XML document 

    return new HttpResponseMessage(); 
} 
+2

"un flusso di byte" - per qualche ragione questo mi fa pensare a una porzione infestata da piranha dell'Orinoco. Più seriamente, tuttavia, ho pubblicato una domanda correlata su http://stackoverflow.com/questions/21994108/how-can-i-read-an-xml-file-in-a-web-api-app –