2011-12-08 51 views
3

使用WebApi,在MVC客戶端中使用服務的最佳方式是什麼?在MVC3中使用WebApi

如果響應回來爲:

<?xml version="1.0" encoding="UTF-8"?> 
<ArrayOfContact 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Contact> 
     <Id>1</Id> 
     <Name>Bilbo Baggins</Name> 
    </Contact> 
    <Contact> 
     <Id>2</Id> 
     <Name>Frodo Baggins</Name> 
    </Contact> 
</ArrayOfContact> 

我怎麼能接受,讓我的聯繫方式,並在使用@Model列出它們在MVC3 Razor視圖?

有一個lot of examples online爲WebApi的最新預覽,但我找不到任何進一步和顯示客戶端消費服務,說使用WebClient。

感謝,

R.

+0

值得加入,該服務是好的。如果我運行var contacts = new WebClient()。DownloadString(「http:// localhost:9000/api/contacts」);我得到的XML文件無後顧之憂。 – Richard

+0

我會使用Linq到Xml。查看[這個問題] [1]的一些例子。 [1]:http://stackoverflow.com/questions/670563/linq-to-read-xml – Lloyd

回答

5

你可以定義一個模式:

public class Contact 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

,然後消耗:

var url = "http://localhost:9000/api/contacts"; 
using (var client = new WebClient()) 
using (var reader = XmlReader.Create(client.OpenRead(url))) 
{ 
    var serializer = new XmlSerializer(typeof(Contact[])); 
    var contacts = (Contact[])serializer.Deserialize(reader); 
    // TODO: Do something with the contacts 
} 
+0

我必須要得到亞歷山大的回答可行的,但Darin的作品是。 – Richard

5

WCF的Web API配備了一個新的,改進的HttpClient實現。 請看看this sample(包含在您的源代碼中,您可以下載here)。

[更新]

var client = new HttpClient(); 
var task = client.GetAsync("http://webapi/Contacts"); 
var contacts = task.ContinueWith(
    t => { 
     return t.Result.Content.ReadAsAsync<List<Contact>>(); 
    }).Unwrap().Result; 

Console.WriteLine(contacts.Count); 
+0

看起來不錯,但是如何將響應中的xml映射到強類型對象? – Richard

+0

您可以訪問響應的Content屬性並調用ReadAsAsync ,其中T是您的類型。 HttpClient使用XmlFormatter中的構建來反序列化你的Xml。 –

+1

更新了我的答案。 –