Comment 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. NAT Les pare-feu et les serveurs mandataires d'entreprise sont partout et cachent de nombreux utilisateurs derrière une adresse IP unique.
Essayer:
Context.Request.UserHostAddress
Essaye ça:
string ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
Je ne l'ai pas essayé dans un webMethod, mais je l'utilise dans HttpRequests standard
Le HttpContext est actuellement disponible dans la classe de base WebService
; utilisez donc simplement Context.Request
(ou HttpContext.Current
qui pointe également vers le contexte actuel) pour accéder aux membres fournis par HttpRequest
.
J'ai créé la fonction suivante:
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";
}
}
Cela ne fonctionne que sur Intranet. Si vous avez un proxy ou un réseau, vous devez vérifier si l’adresse IP originale est déplacée ailleurs dans le paquet http.