リクエストのIPアドレスの数値を取得する最速の方法ASP.NET
質問
数値形式を取得する最速の方法は何でしょうか(文字列形式ではありません)クライアントの?
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 pcchBufferSize
に ppBuffer
あなたが得るのと同じものを含む HttpRequest.UserHostAddress
.
要求送信者に関連する情報を提供するHttpContextの他の部分があるとは思わないので、コメントに投稿したリンクにはたくさんのアイデアがある変換のた