質問

数値形式を取得する最速の方法は何でしょうか(文字列形式ではありません)クライアントの?

string format  : 223.255.254.0
numeric format : 3758095872

私は次のようないくつかのコードでこれをpostcomputeすることができます

    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;
    }

要求に基づいて。UserHostAddress文字列しかし、私はIISまたはASP.NET これを事前計算すると、HttpContextのどこかに隠されています。

私は間違っていますか?

役に立ちましたか?

解決

HttpContextは、あなたがすでに見ているものよりも魔法をやっていないようです:の文字列値 HttpRequest.UserHostAddress

いくつかの背景情報:

HttpContext.Current.Request タイプのものです System.Web.HttpRequest これにはaがかかります System.Web.HttpWorkerRequestインスタンス化されたときのパラメータとして。

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

IIS7HttpWorkerRequest それを知っている REMOTE_ADDR それが読む必要があるIISプロパティであり、要求コンテキストを渡している間に抽象化のいくつかの層を通過した後、それはすべて最終的に呼 MgdGetServerVariableW(IntPtr pHandler, string pszVarName, out IntPtr ppBuffer, out int pcchBufferSize); webengineで。単に長さの文字列を書き込むdll pcchBufferSizeppBuffer あなたが得るのと同じものを含む HttpRequest.UserHostAddress.

要求送信者に関連する情報を提供するHttpContextの他の部分があるとは思わないので、コメントに投稿したリンクにはたくさんのアイデアがある変換のた

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top