Подтвердить что ты не робот

Как получить IP-адрес вызывающего абонента в WebMethod?

Как получить IP-адрес вызывающего абонента в WebMethod?

[WebMethod]
public void Foo()
{
    // HttpRequest... ? - Not giving me any options through intellisense...
}

с использованием С# и ASP.NET

4b9b3361

Ответ 2

Просто осторожно. IP-адреса не могут использоваться для уникальной идентификации клиентов. NAT-брандмауэры и корпоративные прокси-серверы повсюду и скрывают многих пользователей за одним IP-адресом.

Ответ 3

Try:

Context.Request.UserHostAddress

Ответ 4

Попробуйте следующее:

string ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

Не пробовал в webMethod, но я использую его в стандартных HttpRequests

Ответ 5

HttpContext фактически доступен внутри базового класса WebService, поэтому просто используйте Context.Request (или HttpContext.Current, который также указывает на текущий контекст), чтобы получить доступ к членам, предоставленным HttpRequest.

Ответ 6

Я выполнил следующую функцию:

static public string sGetIP()
{
    try
    {
        string functionReturnValue = null;

        String oRequestHttp =
            WebOperationContext.Current.IncomingRequest.Headers["User-Host-Address"];
        if (string.IsNullOrEmpty(oRequestHttp))
        {
            OperationContext context = OperationContext.Current;
            MessageProperties prop = context.IncomingMessageProperties;
            RemoteEndpointMessageProperty endpoint =
                prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
            oRequestHttp = endpoint.Address;
        }
        return functionReturnValue;
    }
    catch (Exception ex)
        {
            return "unknown IP";
        }
}

Эта работа выполняется только в Интранете, если у вас есть прокси или natting, вы должны изучить, если исходный IP-адрес перемещается где-то еще в http-пакете.