Самый быстрый способ получить числовое значение IP-адреса запроса в ASP.NET
Вопрос
Каким будет самый быстрый способ получить числовой формат ( НЕ СТРОЧНЫЙ ФОРМАТ ) клиента?
GenracodicetagpreЯ могу вычислить это с помощью некоторого кода, например
Genracodicetagpreна основе строки Request.UserHostAddress, но я надеялся, что IIS или ASP.NET предварительно вычислит ее, и она где-то спрятана в HttpContext.
Я не прав?
Решение
HttpContext, похоже, не творит больше волшебства, чем то, что вы уже видите: строковое значение в HttpRequest.UserHostAddress
Некоторая справочная информация:
HttpContext.Current.Request
относится к типу System.Web.HttpRequest
, который при создании принимает параметр System.Web.HttpWorkerRequest
as.
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, который просто записывает строку length, сгенерируйте кодовый код в кодовый код, содержащий то же самое, что вы получаете от сгенерированного кода кода.
Поскольку я сомневаюсь, что в HttpContext есть другие части, которые получают информацию, связанную с запросом-отправителем, я предполагаю, что вам придется продолжать делать свою собственную магию для преобразования, для которой есть много идей в ссылке i размещены в комментариях.