2013-09-04 20 views
10

Mam interfejs Web API, który odczytuje XML i przekazuje go do odpowiedniego modelu do przetworzenia.Jak odczytać XML z ASP.NET Web API?

Jak mogę otrzymać przychodzący XML? Który typ danych mam użyć?

Czy używam StreamReader, StreamContent lub XmlDocument lub innych?

Odpowiedz

12

ASP.NET Web API używa negocjacji treści do automatycznego deserializowania przychodzących żądań http do klasy modelu. Po wyjęciu z pudełka będzie to działało z każdą wiadomością XML, JSON lub formularzem wwww-urlen.

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

utworzyć klasę modelu, który mapuje do właściwości XML.

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

Ten przychodzące XML będzie rozszeregować do uwodnienia parametr komputera w metodzie post.

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

Jeśli z jakiegoś powodu chcesz ręcznie czytać i analizować napływające XML, można zrobić tak jak to

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

Używanie ReadAsStreamAsync i ładowanie jest lepszą opcją niż ReadAsString i parsowanie. –

+0

@DarrelMiller Dlaczego tak jest? – Despertar

+0

Ponieważ ReadAsString może wybrać inne kodowanie ciągów niż zdefiniowano w dokumencie XML. –

4

Wszelkie treści przychodzące mogą być odczytywane jako strumień bajtów i następnie przetwarzane zgodnie z wymaganiami.

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

"Strumień bajtów" - z jakiegoś powodu powoduje to, że myślę o zaatakowanej przez piranie części Orinoko. Co ważniejsze, zamieściłem pokrewne pytanie na http://stackoverflow.com/questions/21994108/how-can-i-read-an-xml-file-in-a-web-api-app –