ここでは、これら2つの方法のいずれかを使用できます。違いは何ですか、どちらを使用すればよいですか?
方法1:
string srUserIp = "";
try
{
srUserIp = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
catch
{
}
方法2:
string srUserIp = "";
try
{
srUserIp = Request.UserHostAddress.ToString();
}
catch
{
}
短い答え: 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
プロパティをお勧めします。これは、「マジックストリング」に依存していないためです。
ハッピープログラミング
違いはありません。まったく同じ値を返します。ただし、一方はIntelliSenseに対応していますが、もう一方はそうではありません。