在ASP.NET中获取请求IP地址数值的最快方法
题
获取客户端数字格式(不是字符串格式)的最快方法是什么? 通用标签
我可以通过类似以下代码的方式对此进行计算 通用标签
基于Request.UserHostAddress字符串,但我希望IIS或ASP.NET对此进行预先计算,并将其隐藏在HttpContext中。
我错了吗?
解决方案
HttpContext似乎并没有比您已经看到的更具魔力:HttpRequest.UserHostAddress
中的字符串值
一些背景信息:
HttpContext.Current.Request
类型为System.Web.HttpRequest
,在实例化时采用System.Web.HttpWorkerRequest
作为参数。
HttpWorkerRequest
是一个抽象类,通过托管诸如IIS的System.Web.Hosting.IIS7WorkerRequest
这样的实现实例化,然后实现了GetRemoteAddress()
的抽象方法HttpWorkerRequest
,该方法由HttpRequest.UserHostAddress
内部使用。
IIS7HttpWorkerRequest
知道,REMOTE_ADDR
是它需要读取的IIS属性,在传递请求上下文时经过了几层抽象之后,所有这些最终以在webengine.dll中调用MgdGetServerVariableW(IntPtr pHandler, string pszVarName, out IntPtr ppBuffer, out int pcchBufferSize);
结尾,该脚本只写了一个字符串。将generaodicetagcode的长度转换为generaodicetagcode的长度,其中包含与pcchBufferSize
相同的内容。
由于我怀疑HttpContext中是否还有其他部分获取与请求发送者相关的信息,因此我假设您将不得不继续自己的魔术转换,因此我在链接中有很多想法发表在评论中。