web-dev-qa-db-fra.com

Comment obtenir l'adresse IP de l'appelant dans un WebMethod?

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

51
Guy
82
Darren Kopp

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.

8
davenpcj

Essayer:

Context.Request.UserHostAddress
6
Kev

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

4
Aaron Powell

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.

2
Troels Thomsen

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.

0
depoip