Comment puis-je obtenir l’adresse IP de l’appelant dans un WebMethod?

Comment puis-je obtenir l’adresse IP de l’appelant dans un WebMethod?

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

en utilisant C # et ASP.NET

HttpContext.Current.Request.UserHostAddress est ce que vous voulez.

Juste un avertissement. Les adresses IP ne peuvent pas être utilisées pour identifier de manière unique les clients. Les pare-feux NAT et les proxys d’entreprise sont partout et cachent de nombreux utilisateurs derrière une seule adresse IP.

Essayer:

 Context.Request.UserHostAddress 

Essaye ça:

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

Je ne l’ai pas essayé dans un webMethod, mais je l’utilise dans les HttpRequests standard

Le HttpContext est en fait disponible dans la classe de base WebService . Utilisez simplement Context.Request (ou HttpContext.Current qui pointe également vers le contexte actuel) pour accéder aux membres fournis par HttpRequest .

J’ai fait la fonction suivante:

 static public ssortingng sGetIP() { try { ssortingng functionReturnValue = null; Ssortingng oRequestHttp = WebOperationContext.Current.IncomingRequest.Headers["User-Host-Address"]; if (ssortingng.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"; } } 

Cela ne fonctionne que dans Intranet, si vous avez un proxy ou un natting, vous devriez étudier si l’adresse IP d’origine est déplacée ailleurs dans le paquet http.