HttpContext, кажется, не делает больше магии, чем то, что вы уже видите: строковое значение в HttpRequest.UserHostAddress
Некоторая справочная информация:
HttpContext.Current.Request
имеет тип System.Web.HttpRequest
, который принимает 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 есть другие части, которые получают информацию, связанную с отправителем запроса, я предполагаю, что вам придется продолжать делать свое собственное волшебство для преобразования, для которого есть pмножество идей в ссылке, которую я разместил в комментариях.