在MVC3中使用WebApi进行数据消费。

8 浏览
0 Comments

在MVC3中使用WebApi进行数据消费。

在MVC客户端中,使用WebApi,最好的方法是如何消耗一个服务?\n如果响应返回如下:\n



    
        1
        Bilbo Baggins
    
    
        2
        Frodo Baggins
    

\n我应该如何提取其中的联系人,并在MVC3 Razor视图中使用@Model列出它们?\n有很多在线示例介绍了最新的WebApi预览版,但我找不到任何进一步展示客户端如何消耗服务的示例,比如使用WebClient。\n谢谢,\nR.

0
0 Comments

在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。

0
0 Comments

问题的出现的原因:在使用WCF Web API中的HttpClient来消费WebApi时,如何将响应中的XML映射到强类型对象上。

解决方法:可以通过访问响应的Content属性,并调用ReadAsAsync方法来将XML反序列化为指定类型的对象。HttpClient使用内置的XmlFormatter来完成反序列化操作。

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方法来实现。其中,T是你要映射的类型。HttpClient使用内置的XmlFormatter来完成XML的反序列化操作。

0