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


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 tienes que publicar en un IIS real y no en uno virtual.

Question

Soy totalmente nuevo en la pila ASP.NET MVC, y me preguntaba qué pasó con el objeto Página simple y el objeto Solicitar servidorVariables.

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

Por lo que puedo entender, la mayoría de los objetos variables han sido reemplazados por las variantes HttpRequest .

¿A alguien le importa compartir algunos recursos? Realmente hay un montón de cosas para aprender en el mundo ASP.NET MVC. :)

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. Usé lo siguiente al final:

System.Web.HttpContext.Current.Request.UserHostAddress



Cómo considero que mi sitio está detrás de Amazon AWS Elastic Load Balancer (ELB):

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