Как получить IP-адрес вызывающего абонента в WebMethod?
Как получить IP-адрес вызывающего абонента в WebMethod?
[WebMethod]
public void Foo()
{
// HttpRequest... ? - Not giving me any options through intellisense...
}
С помощью C# и ASP.NET
6 ответов:
HttpContext.Текущий.Запрос.UserHostAddress это то, что вы хотите.
только осторожно. IP-адреса нельзя использовать для уникальной идентификации клиентов. Брандмауэры NAT и корпоративные прокси находятся повсюду и скрывают многих пользователей за одним IP-адресом.
попробуйте это:
string ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
не пробовал его в webMethod, но я использую его в стандартных HttpRequests
HttpContext фактически доступен внутри
WebService
базовый класс, так что просто использоватьContext.Request
(илиHttpContext.Current
что также указывает на текущий контекст), чтобы получить доступ к членам, предусмотренныхHttpRequest
.
Я сделал следующую функцию:
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.