2017-06-12 65 views
-1

我需要在我的控制器中調用此API freegeoip.net/xml/userIpAddress以獲取其數據。這樣freegeoip.net/xml/4.2.2.2asp.net MVC Project-如何在控制器中使用API​​ url

這裏是我的控制器

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> 
+0

你可以用'HttpClient'使一個請求到構造的URL,其中將包括IP地址。我會建議打包/提取到服務。 – Nkosi

+0

@Nkosi非常感謝你。有可能回答我的問題,並給我更多的細節?請。非常感謝你 –

回答

2

使用HttpClient

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; } 
} 
+0

謝謝。渲染什麼是響應之後? –

+1

你的意思是如何反序列化響應?如果是這樣:https://stackoverflow.com/questions/19942486/how-to-use-httpclient-to-read-an-xml-response – peco

+0

非常感謝。很有幫助。我真的很陌生,API的。是否可以幫助我一步一步完成?現在我應該創建一個班級? –

相關問題