0

クライアントの数値形式 ( NOT THE STRING FORMAT ) を取得する最速の方法は何ですか?

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インスタンス化時に as パラメータSystem.Web.HttpRequestを取る型です。System.Web.HttpWorkerRequest

HttpWorkerRequest、IIS の場合のような実装をホストすることによってインスタンス化される抽象クラスであり、次にによって内部的に使用されるSystem.Web.Hosting.IIS7WorkerRequest抽象メソッドGetRemoteAddress()を実装します。HttpWorkerRequestHttpRequest.UserHostAddress

IIS7HttpWorkerRequestそれが読み取る必要がある IIS プロパティであることを認識しREMOTE_ADDR、リクエスト コンテキストを渡しながらさらにいくつかの抽象化レイヤーを通過した後、最終的に webengine.dll を呼び出すことですべてが終了しMgdGetServerVariableW(IntPtr pHandler, string pszVarName, out IntPtr ppBuffer, out int pcchBufferSize);ますpcchBufferSizeppBufferから取得しHttpRequest.UserHostAddressます。

リクエスト送信者関連の情報を取得する HttpContext の他の部分があるとは思えないので、私が投稿したリンクにたくさんのアイデアがある変換のために、独自の魔法を使い続ける必要があると思いますコメント。

于 2011-06-17T12:56:26.193 に答える