C# asp.net MVC项目-如何在控制器中使用API url

C# asp.net MVC项目-如何在控制器中使用API url,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,我需要在控制器运行期间调用此API freegoip.net/xml/userIpAddress来获取其数据。像这样的freegoip.net/xml/4.2.2.2 这是我的控制器 public ActionResult Index(string language) { if (String.IsNullOrWhiteSpace(language) == false) { Thread.CurrentThread.CurrentCulture = Culture

我需要在控制器运行期间调用此API freegoip.net/xml/userIpAddress来获取其数据。像这样的freegoip.net/xml/4.2.2.2

这是我的控制器

public ActionResult Index(string language)
{
    if (String.IsNullOrWhiteSpace(language) == false)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
    }

     else if (String.IsNullOrWhiteSpace(language))
    {
        string userIpAddress = this.Request.UserHostAddress;

       //here how I can call freegeoip.net/xml/userIpAddress

    }

}
以下是XML响应的外观:

<Response>
 <IP>4.2.2.2</IP>
 <CountryCode>US</CountryCode>
 <CountryName>United States</CountryName>
 <RegionCode/>
 <RegionName/>
 <City/>
 <ZipCode/>
 <TimeZone/>
 <Latitude>37.751</Latitude>
 <Longitude>-97.822</Longitude>
 <MetroCode>0</MetroCode>
 </Response>
使用HttpClient:


您可以使用HttpClient向构造的url发出请求,该url将包括ip地址。我建议将其包装/提取到服务中。@Nkosi非常感谢您。能回答我的问题并给我更多的细节吗?请非常感谢您您是说如何反序列化响应?如果有的话:非常感谢。有用的我对API真的很陌生。有没有可能帮助我一步一步地完成?现在我应该创建一个类?添加了一个反序列化示例。我使用此站点生成对象:
public async Task<ActionResult> Index(string language)
{
    if (String.IsNullOrWhiteSpace(language) == false)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
    }

    else if (String.IsNullOrWhiteSpace(language))
    {
        string userIpAddress = this.Request.UserHostAddress;

        var client = new HttpClient
        {
            BaseAddress = new Uri("http://freegeoip.net/xml/")
        };

        var response = await client.GetAsync(userIpAddress);

        var content = await response.Content.ReadAsStringAsync();

        var result = (Response)new XmlSerializer(typeof(Response)).Deserialize(new StringReader(content));

        // do stuff
    }

    ...
}

[XmlRoot(ElementName = "Response")]
public class Response
{
    [XmlElement(ElementName = "IP")]
    public string IP { get; set; }
    [XmlElement(ElementName = "CountryCode")]
    public string CountryCode { get; set; }
    [XmlElement(ElementName = "CountryName")]
    public string CountryName { get; set; }
    [XmlElement(ElementName = "RegionCode")]
    public string RegionCode { get; set; }
    [XmlElement(ElementName = "RegionName")]
    public string RegionName { get; set; }
    [XmlElement(ElementName = "City")]
    public string City { get; set; }
    [XmlElement(ElementName = "ZipCode")]
    public string ZipCode { get; set; }
    [XmlElement(ElementName = "TimeZone")]
    public string TimeZone { get; set; }
    [XmlElement(ElementName = "Latitude")]
    public string Latitude { get; set; }
    [XmlElement(ElementName = "Longitude")]
    public string Longitude { get; set; }
    [XmlElement(ElementName = "MetroCode")]
    public string MetroCode { get; set; }
}