0

获取客户端的数字格式(不是字符串格式)的最快方法是什么?

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 中的某个地方。

我错了吗?

4

1 回答 1

1

HttpContext 似乎并没有比你已经看到的更神奇:一个字符串值HttpRequest.UserHostAddress

一些背景资料:

HttpContext.Current.Request是在实例化时System.Web.HttpRequest将 a作为参数的类型。System.Web.HttpWorkerRequest

HttpWorkerRequest是一个抽象类,通过托管实现来实例化,例如在 IIS 的情况下,然后System.Web.Hosting.IIS7WorkerRequest实现由.GetRemoteAddress()HttpWorkerRequestHttpRequest.UserHostAddress

IIS7HttpWorkerRequest知道这REMOTE_ADDR是它需要读取的 IIS 属性,并且在传递请求上下文的同时又经历了几层抽象之后,这一切最终都以调用MgdGetServerVariableW(IntPtr pHandler, string pszVarName, out IntPtr ppBuffer, out int pcchBufferSize);webengine.dll 结束,它只是将一个长度字符串写入pcchBufferSize包含ppBuffer相同的东西你从HttpRequest.UserHostAddress.

由于我怀疑 HttpContext 中是否还有其他部分可以获取与请求发送者相关的信息,所以我假设您必须继续为转换做自己的魔法,我在评论。

于 2011-06-17T12:56:26.193 回答