2011-12-08 21 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

更新了我的答案。 –