C# asp.net MVC项目-如何在控制器中使用API url
我需要在控制器运行期间调用此API freegoip.net/xml/userIpAddress来获取其数据。像这样的freegoip.net/xml/4.2.2.2 这是我的控制器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
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; }
}