C# Request.UserHostAddress和Request.ServerVariables[";REMOTE\u ADDR";].ToString()之间的区别是什么
在这里,我可以使用这两种方法中的任何一种。区别是什么?我应该使用哪一个 方法1: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
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,哪种方法会导致问题,问题是什么?可能的重复