在MVC3中使用WebApi进行数据消费。
在MVC3中使用WebApi进行数据消费。
在MVC客户端中,使用WebApi,最好的方法是如何消耗一个服务?\n如果响应返回如下:\n
1 Bilbo Baggins 2 Frodo Baggins
\n我应该如何提取其中的联系人,并在MVC3 Razor视图中使用@Model列出它们?\n有很多在线示例介绍了最新的WebApi预览版,但我找不到任何进一步展示客户端如何消耗服务的示例,比如使用WebClient。\n谢谢,\nR.
在MVC3中消费WebApi的问题是由于无法正确使用Alexander的代码而引起的。然而,Darin的代码可以直接使用。
问题的原因是无法正确使用Alexander的回复中的代码。解决方法是使用Darin提供的代码。下面是可以在MVC3中消费WebApi的正确代码:
首先,我们需要定义一个模型,如下所示:
public class Contact { public int Id { get; set; } public string Name { get; set; } }
然后,我们可以使用以下代码来消费WebApi:
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 }
通过使用以上代码,我们可以成功在MVC3中消费WebApi。
问题的出现的原因:在使用WCF Web API中的HttpClient来消费WebApi时,如何将响应中的XML映射到强类型对象上。
解决方法:可以通过访问响应的Content属性,并调用ReadAsAsync
WCF Web API提供了一种新的、改进的HttpClient实现方式。我们可以通过以下示例来了解如何使用它来消费WebApi(示例代码可以在这里下载源代码):
var client = new HttpClient(); var task = client.GetAsync("http://webapi/Contacts"); var contacts = task.ContinueWith( t => { return t.Result.Content.ReadAsAsync>(); }).Unwrap().Result; Console.WriteLine(contacts.Count);
以上代码看起来很好,但是如何将响应中的XML映射到我的强类型对象上呢?答案是可以通过访问响应的Content属性,并调用ReadAsAsync