我可以为外部服务使用ASP.NET Web API模型绑定吗?

我可以为外部服务使用ASP.NET Web API模型绑定吗?,.net,asp.net-web-api,.net,Asp.net Web Api,如果我想打电话到这里: 我有以下两个类,目前正在使用XMLDocument解析我的响应: public class Data { private IEnumerable<Game> Game { get; set; } } public class Game { public int id { get; set; } public

如果我想打电话到这里:

我有以下两个类,目前正在使用
XMLDocument
解析我的响应:

        public class Data
        {
           private IEnumerable<Game> Game { get; set; } 
        }

        public class Game
        {
            public int id { get; set; }
            public string GameTitle { get; set; }
            public DateTime ReleaseDate { get; set; }
            public string Platform { get; set; }
        }
公共类数据
{
私有IEnumerable对策{get;set;}
}
公开课游戏
{
公共int id{get;set;}
公共字符串GameTitle{get;set;}
公共日期时间释放日期{get;set;}
公共字符串平台{get;set;}
}

我曾经说过,我可以通过使用ASP.NETWebAPI进行调用来简化事情,并让它自动绑定到我的模型?或者这只适用于从
ApiController
发送数据吗?

当然,只需安装Microsoft.AspNet.WebApi.Client包-

现在,您可以调用外部服务并直接读取对象:

var client = new HttpClient();
var response = await client.GetAsync("http://thegamesdb.net/api/GetGamesList.php?name=x-men");
if (response.IsSuccessStatusCode)
{
    var data = await response.Content.ReadAsAsync<Data>();
    foreach (var game in data.Game)
    {
        Console.WriteLine("{0}\t{1};\t{2}", game.Id, game.GameTitle, game.Platform);
    }
}
var-client=new-HttpClient();
var response=wait client.GetAsync(“http://thegamesdb.net/api/GetGamesList.php?name=x-男子);
if(响应。IsSuccessStatusCode)
{
var data=wait response.Content.ReadAsAsync();
foreach(data.game中的var博弈)
{
Console.WriteLine(“{0}\t{1};\t{2}”,game.Id,game.GameTitle,game.Platform);
}
}
编辑:

考虑到XML具有集合的非标准格式,请执行以下操作:

[XmlRoot("Data")]
public class Data
{
    [XmlElement("Game")]
    public List<Game> Games { get; set; }
}

[XmlType("Game")]
public class Game
{
    public int id { get; set; }
    public string GameTitle { get; set; }
    public string ReleaseDate { get; set; }
    public string Platform { get; set; }
}
[XmlRoot(“数据”)]
公共类数据
{
[XmlElement(“游戏”)]
公共列表游戏{get;set;}
}
[XmlType(“游戏”)]
公开课游戏
{
公共int id{get;set;}
公共字符串GameTitle{get;set;}
公共字符串ReleaseDate{get;set;}
公共字符串平台{get;set;}
}
以及:

var-client=new-HttpClient();
var response=wait client.GetAsync(“http://thegamesdb.net/api/GetGamesList.php?name=x-男子);
if(响应。IsSuccessStatusCode)
{
var games=wait response.Content.ReadAsAsync(new HashSet(){new xmlmediatypetformatter{UseXmlSerializer=true}});
foreach(games.games中的var博弈)
{
Console.WriteLine(“{0}\t{1};\t{2}”,game.id,game.GameTitle,game.Platform);
}
}
我们需要提示
XmlSerializer
如何处理以属性形式发送给您的数组。此外,它们的日期无效,因此您应该将其保存为字符串(或在setter中解析)


另外,由于我们使用的是
XmlSerializer
而不是
DataContractSerializer
,所以不能使用
IEnumerable
,它需要是
List

我设置了一个控制台应用程序来测试此代码,我得到了以下错误:第1行位置7处的错误。应为命名空间“”中的元素“数据”。。遇到名称为“数据”的“元素”,命名空间为“”。1。您应该使用[DataContract(Namespace=”“)]装饰类,并使用[DataMember]装饰每个属性。2.我只是查看了您的XML,它无论如何都不会反序列化为IEnumerable,因为它不是数组,而是的属性。因此,您不能将该1对1投影到CLR对象—您是一个向导!非常感谢。
    var client = new HttpClient();
    var response = await client.GetAsync("http://thegamesdb.net/api/GetGamesList.php?name=x-men");
    if (response.IsSuccessStatusCode)
    {
        var games = await response.Content.ReadAsAsync<Data>(new HashSet<MediaTypeFormatter>() { new XmlMediaTypeFormatter {UseXmlSerializer = true} });
        foreach (var game in games.Games)
        {
            Console.WriteLine("{0}\t{1};\t{2}", game.id, game.GameTitle, game.Platform);
        }
    }