【问题标题】:What is the difference between Request.UserHostAddress and Request.ServerVariables["REMOTE_ADDR"].ToString()Request.UserHostAddress 和 Request.ServerVariables["REMOTE_ADDR"].ToString() 有什么区别
【发布时间】:2012-12-21 17:28:48
【问题描述】:

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

方法一:

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

    }

方法二:

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

    }

【问题讨论】:

标签: c# asp.net request


【解决方案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 还是更高版本以及其他一些因素,但您将在 Web 应用程序中使用的所有类都具有相同的代码对于GetRemoteAddress(),即:

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

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

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

快乐编程

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 2013-05-18
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2018-07-17
      • 2018-07-28
      相关资源
      最近更新 更多