获取客户的数字格式(不是格式)的最快方法是什么?
string format : 223.255.254.0
numeric format : 3758095872
我可以通过像
这样的代码对此进行后期计算 static public uint IPAddressToLong(string ipAddress)
{
var oIP = IPAddress.Parse(ipAddress);
var byteIP = oIP.GetAddressBytes();
var ip = (uint)byteIP[0] << 24;
ip += (uint)byteIP[1] << 16;
ip += (uint)byteIP[2] << 8;
ip += byteIP[3];
return ip;
}
基于Request.UserHostAddress字符串,但我希望IIS或ASP.NET预先计算它,并且它隐藏在HttpContext中。
我错了吗?
答案 0 :(得分:1)
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属性,在传递请求上下文后经过几层抽象之后,它最终都以调用{{1}结束在webengine.dll中,它只是将一个长度为MgdGetServerVariableW(IntPtr pHandler, string pszVarName, out IntPtr ppBuffer, out int pcchBufferSize);
的字符串写入pcchBufferSize
,其中包含您从ppBuffer
获得的相同内容。
由于我怀疑HttpContext中还有其他部分可以获取请求发送者相关信息,我假设您必须继续为转换做出自己的魔力,因为链接中有很多想法张贴在评论中。