Request.UserHostAddress和Request.ServerVariables 之间的区别是什么?ToString()

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

方法1:

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

方法2:

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

简短的回答:两者是相同的。

长答案:确定两个使用reflection器(或任何反汇编你喜欢)之间的差异。

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

 public string UserHostAddress { get { if (this._wr != null) { return this._wr.GetRemoteAddress(); } return null; } } 

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

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

正如你所看到的, GetRemoteAddress()只是返回服务器variablesREMOTE_ADDR

至于哪一个使用,我build议UserHostAddress属性,因为是不依赖“魔术string”。

快乐的编程

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