it-swarm.com.de

Wie erhalte ich die IP-Adresse des Anrufers in einer WebMethod?

Wie erhalte ich die IP-Adresse des Anrufers in einer WebMethod?

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

mit C # und ASP.NET

51
Guy
82
Darren Kopp

Nur eine Vorsicht. IP-Adressen können nicht zur eindeutigen Identifizierung von Clients verwendet werden. NAT Firewalls und Unternehmens-Proxies sind überall und verstecken viele Benutzer hinter einer einzigen IP-Adresse.

8
davenpcj

Versuchen:

Context.Request.UserHostAddress
6
Kev

Versuche dies:

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

Ich habe es nicht in einer webMethod probiert, aber ich verwende es in Standard-HttpRequests

4
Aaron Powell

HttpContext ist tatsächlich in der WebService-Basisklasse verfügbar. Verwenden Sie einfach Context.Request (oder HttpContext.Current, der auf den aktuellen Kontext verweist), um auf die Member zuzugreifen, die von der HttpRequest bereitgestellt werden.

2
Troels Thomsen

Ich habe folgende Funktion gemacht:

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";
        }
}

Dies funktioniert nur im Intranet. Wenn Sie über Proxy oder Natting verfügen, sollten Sie lernen, ob die ursprüngliche IP-Adresse im HTTP-Paket an eine andere Stelle verschoben wird.

0
depoip