web-dev-qa-db-ja.com

Request.UserHostAddressとRequest.ServerVariables ["REMOTE_ADDR"]。ToString()の違いは何ですか

ここでは、これら2つの方法のいずれかを使用できます。違いは何ですか、どちらを使用すればよいですか?

方法1:

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

    }

方法2:

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

    }
40
MonsterMMORPG

短い答え: 2つは同じです。

長答: 2つの違いを判断するには、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以降、または他のいくつかの要因がありますが、Webアプリケーションで使用するすべての要因は、GetRemoteAddress()に対して同じコードを持ちます。つまり:

_public override string GetRemoteAddress()
{
    return this.GetServerVariable("REMOTE_ADDR");
}
_

ご覧のとおり、GetRemoteAddress()は単にサーバー変数_REMOTE_ADDR_を返します。

どちらを使用するかについては、UserHostAddressプロパティをお勧めします。これは、「マジックストリング」に依存していないためです。

ハッピープログラミング

57
Scott Mitchell

違いはありません。まったく同じ値を返します。ただし、一方はIntelliSenseに対応していますが、もう一方はそうではありません。

5
Mike Brind