Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Request.UserHostAddress和Request.ServerVariables[";REMOTE\u ADDR";].ToString()之间的区别是什么_C#_Asp.net_Request - Fatal编程技术网

C# Request.UserHostAddress和Request.ServerVariables[";REMOTE\u ADDR";].ToString()之间的区别是什么

C# Request.UserHostAddress和Request.ServerVariables[";REMOTE\u ADDR";].ToString()之间的区别是什么,c#,asp.net,request,C#,Asp.net,Request,在这里,我可以使用这两种方法中的任何一种。区别是什么?我应该使用哪一个 方法1: string srUserIp = ""; try { srUserIp = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString(); } catch { } string srUserIp = ""; try { s

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

方法1:

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

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

    }
方法2:

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

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

    }

没有区别。它们返回的值完全相同。但是,一个是智能感知友好型,而另一个不是。

简短回答:这两个是相同的

详细回答:要确定两者之间的差异,请使用反射器(或您喜欢的任何拆装器)

HttpRequest.UserHostAddress属性的代码如下所示:

public string UserHostAddress
{
    get
    {
        if (this._wr != null)
        {
            return this._wr.GetRemoteAddress();
        }
        return null;
    }
}
请注意,它返回
\u wr.GetRemoteAddress()
\u wr
变量是
HttpWorkerRequest
对象的实例。从
HttpWorkerRequest
派生出不同的类,使用哪个类取决于您使用的是IIS 6、IIS 7还是更高版本,以及其他一些因素,但在web应用程序中使用的所有类都具有相同的
GetRemoteAddress()
代码,即:

public override string GetRemoteAddress()
{
    return this.GetServerVariable("REMOTE_ADDR");
}
如您所见,
GetRemoteAddress()
只返回服务器变量
REMOTE\u ADDR

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


快乐编程

如果用户有代理服务器,这些不会产生相同的结果,是吗?方法2将获取代理的地址,而不是用户的计算机。我不会使用方法2而不是方法1。只需要让别人知道是谁在读这篇文章,这会造成问题。所以我不再使用了。@MonsterMMORPG,哪种方法会导致问题,问题是什么?可能的重复