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.