2013-09-04 19 views
10

XMLを読み込んで処理するための適切なモデルに渡すWeb APIがあります。ASP.NET Web APIからXMLを読み取る方法は?

入ってくるXMLをどのように受け取ることができますか?私はどのデータ型を使うべきですか?

StreamReader,StreamContentまたはXmlDocumentなどを使用しますか?

答えて

12

ASP.NET Web APIは、コンテンツネゴシエーションを使用して、受信HTTP要求をモデルクラスに自動的に逆シリアル化します。これは任意のXML、JSON、またはwwww-form-urlencodedメッセージで動作します。

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

XMLのプロパティにマップするモデルクラスを作成します。

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

この入ってくるXMLは、POSTメソッドでは、コンピュータのパラメータを水和するために非直列化されるだろう。

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

どれ着信コンテンツはバイトストリームとして読み取ることができ、この

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

ReadAsStreamAsyncとLoadを使用する方が、ReadAsStringとParseよりも優れたオプションです。 –

+0

@DarrelMillerそれはなぜですか? – Despertar

+0

ReadAsStringは、XMLドキュメントで定義されているものとは異なる文字列エンコーディングを選択する可能性があるためです。 –

4

のように手動で受信したXMLを読み込んで解析したい何らかの理由で、あなたはそうすることができればと必要に応じて処理されます。

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

"バイトのストリーム" - 何らかの理由で、これはOrinocoのピラニアに感染した部分を考えるようになります。 もっと真剣に、http://stackoverflow.com/questions/21994108/how-can-i-read-an-xml-file-in-a-web-api-appに関連する質問を掲載しました –

関連する問題