Подтвердить что ты не робот

В чем разница между Request.UserHostAddress и Request.ServerVariables [ "REMOTE_ADDR" ]. ToString()

Здесь я могу использовать любой из этих двух методов. Каковы различия и какой я должен использовать?

Метод 1:

    string srUserIp = "";
    try
    {
        srUserIp = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
    }
    catch
    {

    }

Метод 2:

    string srUserIp = "";
    try
    {
        srUserIp = Request.UserHostAddress.ToString();
    }
    catch
    {

    }
4b9b3361

Ответ 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, поскольку он не полагается на "магические строки".

Счастливое программирование

Ответ 2

Нет никакой разницы. Они возвращают точно такое же значение. Тем не менее, один является дружественным IntelliSense, тогда как другой - нет.