Ответ 1
Короткий ответ: Оба идентичны.
Длинный ответ: Чтобы определить разницу между двумя, используйте Reflector (или любой другой дизассемблер, который вы предпочитаете).
Код для свойства HttpRequest.UserHostAddress
следует:
public string UserHostAddress
{
get
{
if (this._wr != null)
{
return this._wr.GetRemoteAddress();
}
return null;
}
}
Обратите внимание, что он возвращает _wr.GetRemoteAddress()
. Переменная _wr
является экземпляром объекта HttpWorkerRequest
. Существуют разные классы, полученные из HttpWorkerRequest
и которые используются, зависит от того, используете ли вы IIS 6, IIS 7 или за ее пределами и некоторые другие факторы, но все те, которые вы используете в веб-приложении, имеют один и тот же код для GetRemoteAddress()
, а именно:
public override string GetRemoteAddress()
{
return this.GetServerVariable("REMOTE_ADDR");
}
Как вы можете видеть, GetRemoteAddress()
просто возвращает переменную сервера REMOTE_ADDR
.
Насколько я могу использовать, я бы предложил свойство UserHostAddress
, поскольку он не полагается на "магические строки".
Счастливое программирование