在这里,我可以使用这两种方法中的任何一种。我应该使用哪些差异?
方法1:
string srUserIp = "";
try
{
srUserIp = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
catch
{
}
方法2:
string srUserIp = "";
try
{
srUserIp = Request.UserHostAddress.ToString();
}
catch
{
}
答案 0 :(得分:56)
简答:两者完全相同。
长答案:要确定两者之间的区别,请使用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
属性,因为它不依赖于“魔术字符串”。
快乐编程
答案 1 :(得分:5)
没有区别。它们返回完全相同的值。但是,一个是IntelliSense友好的,而另一个则不是。