asp.net-mvc ¿Cómo puedo obtener la dirección IP del cliente en ASP.NET MVC?




3 Answers

Request.ServerVariables["REMOTE_ADDR"] debería funcionar, ya sea directamente en una vista o en el cuerpo del método de acción del controlador (Request es una propiedad de la clase Controller en MVC, no en Page).

Está funcionando ... pero hay que publicar en un IIS real, no en el virtual.

asp.net-mvc

Soy totalmente nuevo en la pila MVC de ASP.NET, y me preguntaba qué sucedió con el objeto Page simple y el objeto Request ServerVariables

Básicamente, quiero extraer la dirección IP de la PC cliente, pero no entiendo cómo la estructura actual de MVC ha cambiado todo esto.

Hasta donde puedo entender, la mayoría de los objetos variables han sido reemplazados por las variantes HttpRequest .

¿A alguien le interesa compartir algunos recursos? Realmente hay un mar de cosas que aprender en el mundo MVC de ASP.NET. :)

Por ejemplo, tengo una clase estática con esta función actual. ¿Cómo obtengo el mismo resultado usando ASP.NET MVC?

public static int getCountry(Page page)
{
    return getCountryFromIP(getIPAddress(page));
}

public static string getIPAddress(Page page)
{
    string szRemoteAddr = page.Request.ServerVariables["REMOTE_ADDR"];
    string szXForwardedFor = page.Request.ServerVariables["X_FORWARDED_FOR"];
    string szIP = "";

    if (szXForwardedFor == null)
    {
        szIP = szRemoteAddr;
    }
    else
    {
        szIP = szXForwardedFor;

        if (szIP.IndexOf(",") > 0)
        {
            string [] arIPs = szIP.Split(',');

            foreach (string item in arIPs)
            {
                if (!isPrivateIP(item))
                {
                    return item;
                }
            }
        }
    }
    return szIP;
}

¿Y cómo llamo a esta función desde la página del controlador?




Tuve problemas para usar lo anterior y necesitaba la dirección IP de un controlador. Utilicé lo siguiente al final:

System.Web.HttpContext.Current.Request.UserHostAddress



Cómo considero que mi sitio está detrás de un equilibrador de carga elástica (ELB) de Amazon AWS :

public class GetPublicIp {

    /// <summary>
    /// account for possbility of ELB sheilding the public IP address
    /// </summary>
    /// <returns></returns>
    public static string Execute() {
        try {
            Console.WriteLine(string.Join("|", new List<object> {
                    HttpContext.Current.Request.UserHostAddress,
                    HttpContext.Current.Request.Headers["X-Forwarded-For"],
                    HttpContext.Current.Request.Headers["REMOTE_ADDR"]
                })
            );

            var ip = HttpContext.Current.Request.UserHostAddress;
            if (HttpContext.Current.Request.Headers["X-Forwarded-For"] != null) {
                ip = HttpContext.Current.Request.Headers["X-Forwarded-For"];
                Console.WriteLine(ip + "|X-Forwarded-For");
            }
            else if (HttpContext.Current.Request.Headers["REMOTE_ADDR"] != null) {
                ip = HttpContext.Current.Request.Headers["REMOTE_ADDR"];
                Console.WriteLine(ip + "|REMOTE_ADDR");
            }
            return ip;
        }
        catch (Exception ex) {
            Console.Error.WriteLine(ex.Message);
        }
        return null;
    }
}



Related