Request.UserHostAddress和Request.ServerVariables ["REMOTE_ADDR"]之间有什么区别.ToString()

Mon*_*RPG 41 c# asp.net request

在这里我可以使用这两种方法中的任何一种.有什么区别,我应该使用哪一个?

方法1:

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

    }
Run Code Online (Sandbox Code Playgroud)

方法2:

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

    }
Run Code Online (Sandbox Code Playgroud)

Sco*_*ell 59

简短回答:两者完全相同.

答案很长:确定两者之间的区别使用Reflector(或者你喜欢的任何反汇编程序).

HttpRequest.UserHostAddress属性的代码如下:

public string UserHostAddress
{
    get
    {
        if (this._wr != null)
        {
            return this._wr.GetRemoteAddress();
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,它返回_wr.GetRemoteAddress().该_wr变量是一个实例HttpWorkerRequest对象.有一些不同的派生类HttpWorkerRequest和使用哪一个取决于您使用的是IIS 6,IIS 7还是其他因素,以及其他一些因素,但您在Web应用程序中使用的所有因素都具有相同的代码GetRemoteAddress(),即:

public override string GetRemoteAddress()
{
    return this.GetServerVariable("REMOTE_ADDR");
}
Run Code Online (Sandbox Code Playgroud)

如您所见,GetRemoteAddress()只需返回服务器变量REMOTE_ADDR.

至于使用哪一个,我建议该UserHostAddress属性,因为它不依赖于"魔术字符串".

快乐的编程


Mik*_*ind 5

没有区别.它们返回完全相同的值.但是,一个是IntelliSense友好的,而另一个则不是.