2013-09-04 40 views
10

Tôi có một API Web có thể đọc XML và chuyển nó đến mô hình thích hợp để xử lý.Làm thế nào để đọc XML từ ASP.NET Web API?

Làm cách nào để nhận được XML đang đến? Tôi nên sử dụng kiểu dữ liệu nào?

Tôi có sử dụng StreamReader, StreamContent hoặc XmlDocument hoặc cách khác không?

Trả lời

12

ASP.NET Web API sử dụng thương lượng nội dung để tự động deserialize một yêu cầu http đến vào một lớp mô hình. Trong hộp, điều này sẽ hoạt động với bất kỳ thông báo XML, JSON hoặc wwww-form-urlencoded nào.

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

Tạo một lớp mô hình mà bản đồ để các thuộc tính của XML.

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

XML đến này sẽ được deserialized để hydrate tham số máy tính trong phương pháp Post.

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

Nếu vì bất cứ lý do bạn muốn tự đọc và phân tích cú pháp xml đến, bạn có thể làm như vậy như thế này

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

Sử dụng ReadAsStreamAsync và Tải là một tùy chọn tốt hơn so với ReadAsString và Phân tích cú pháp. –

+0

@DarrelMiller Tại sao vậy? – Despertar

+0

Vì ReadAsString có thể chọn một mã hóa chuỗi khác với được định nghĩa trong tài liệu XML. –

4

Bất kỳ nội dung đến có thể được đọc như một luồng byte và sau đó xử lý theo yêu cầu.

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

"một dòng byte" - vì một lý do nào đó khiến tôi nghĩ đến một phần bị nhiễm độc của Orinoco. Nghiêm trọng hơn, tuy nhiên, tôi đã đăng câu hỏi có liên quan tại http://stackoverflow.com/questions/21994108/how-can-i-read-an-xml-file-in-a-web-api-app –

Các vấn đề liên quan