Как получить IP-адрес пользователей из службы облачных приложений Azure - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь использовать приведенный ниже код, чтобы получить IP-адрес пользователей, чтобы понять, в какой стране они находятся, но когда я публикую sh my MVC Core для службы приложения в Azure, возвращается IP-адрес IP-адрес из Нидерландов, присвоенный Microsoft Corporation, потому что он размещен в облаке и использует облачный IP-адрес? Если да, то как мне обойти это?

string info = new WebClient().DownloadString("http://ipinfo.io");
            return JsonConvert.DeserializeObject<IpInfo>(info);

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Попробуйте следующий код, он доступен на сайте: https://dotnetfiddle.net/4LRFYp

using System;
using System.Net;
using Newtonsoft.Json;

public class GetGeoLocation
{
    public IPData GetIPGeoLocation(string IP)
    {
        WebClient client = new WebClient();
        // Make an api call and get response.
        try
        {
            string response = client.DownloadString("http://ip-api.com/json/" + IP);
            //Deserialize response JSON
            IPData ipdata = JsonConvert.DeserializeObject<IPData>(response);
            if (ipdata.status == "fail")
            {
                throw new Exception("Invalid IP");
            }

            return ipdata;
        }
        catch (Exception)
        {
            throw;
        }
    }

    public static void Main()
    {
        IPData ipdata = new GetGeoLocation().GetIPGeoLocation("208.80.152.201");
        Console.WriteLine(ipdata.status + " - Your IP belongs to '" + ipdata.region + " - " + ipdata.country + "'");
    }
}

public class IPData
{
    public string status { get; set; }
    public string country { get; set; }
    public string countryCode { get; set; }
    public string region { get; set; }
    public string regionName { get; set; }
    public string city { get; set; }
    public string zip { get; set; }
    public string lat { get; set; }
    public string lon { get; set; }
    public string timezone { get; set; }
    public string isp { get; set; }
    public string org { get; set; }
    public string @as { get; set; }
    public string query { get; set; }
}
0 голосов
/ 04 августа 2020

Вот код, который вы можете использовать:

    var origin = Request.Headers.ContainsKey("CLIENT-IP") ? Request.Headers["CLIENT-IP"][0] : "";

, где Request - это объект HTTP-запроса

...