c# - form - request in asp
¿Cuál es la diferencia entre Request.UserHostAddress y Request.ServerVariables["REMOTE_ADDR"]. ToString() (2)
Aquí puedo usar cualquiera de estos 2 métodos. ¿Cuáles son las diferencias y cuál debo usar?
Método 1:
string srUserIp = "";
try
{
srUserIp = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
catch
{
}
Método 2:
string srUserIp = "";
try
{
srUserIp = Request.UserHostAddress.ToString();
}
catch
{
}
No hay diferencia. Devuelven exactamente el mismo valor. Sin embargo, uno es compatible con IntelliSense mientras que el otro no.
Respuesta corta: los dos son idénticos.
Respuesta larga: para determinar la diferencia entre los dos, use el reflector (o el desensamblador que prefiera).
El código para la propiedad HttpRequest.UserHostAddress
sigue:
public string UserHostAddress
{
get
{
if (this._wr != null)
{
return this._wr.GetRemoteAddress();
}
return null;
}
}
Tenga en cuenta que devuelve _wr.GetRemoteAddress()
. La variable _wr
es una instancia de un objeto HttpWorkerRequest
. Hay diferentes clases derivadas de HttpWorkerRequest
y cuál se usa depende de si está usando IIS 6, IIS 7 o más, y algunos otros factores, pero todos los que usaría en una aplicación web tienen el mismo código para GetRemoteAddress()
, a saber:
public override string GetRemoteAddress()
{
return this.GetServerVariable("REMOTE_ADDR");
}
Como puede ver, GetRemoteAddress()
simplemente devuelve la variable de servidor REMOTE_ADDR
.
En cuanto a cuál usar, sugeriría la propiedad UserHostAddress
ya que no depende de "magic strings".
Programación feliz