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()
。 _wr
variables是一个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友好的,而另一个不是。