Ermitteln Sie die IP-Adresse des Remote-Hosts
In ASP.NET es ist ein System.Web.HttpRequest
- Klasse, die enthält ServerVariables
Eigenschaft, die uns die IP-Adresse von REMOTE_ADDR
- Eigenschaft-Wert.
Jedoch konnte ich nicht finden, einen ähnlichen Weg, um die IP-Adresse des remote-host aus ASP.NET Web-API.
Wie bekomme ich die IP-Adresse des remote-host, der die Anfrage?
InformationsquelleAutor der Frage paulius_l | 2012-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, das zu tun, aber nicht sehr sichtbar - Sie müssen mit dem property bag aus dem eingehenden request, und der Eigenschaft, die Sie zugreifen müssen, hängt davon ab, ob Sie über die Web-API unter IIS (webhosted) oder self-hosted. Der code unten zeigt, wie dies getan werden kann.
InformationsquelleAutor der Antwort carlosfigueira
Diese Lösung umfasst auch die Web API self-hosted mit Owin. Teilweise aus hier.
Können Sie erstellen, die eine private Methode in Sie
ApiController
zurückgeben, remote-IP-Adresse, egal wie, Sie hosten Ihre Web-API:Referenzen erforderlich:
HttpContextWrapper
- System.Web.dllRemoteEndpointMessageProperty
- System.ServiceModel.dllOwinContext
- Microsoft.Owin.dll (Sie haben es bereits, wenn Sie Owin-Paket)Ein kleines problem mit dieser Lösung ist, dass Sie haben, um Bibliotheken zu laden, die für alle 3 Fälle, wenn Sie tatsächlich nur einer von Ihnen während der Laufzeit. Wie vorgeschlagen hierdies kann überwunden werden durch die Verwendung
dynamic
Variablen. Sie können auch schreibenGetClientIpAddress
Methode als eine Erweiterung fürHttpRequestMethod
.Nun können Sie es wie folgt:
InformationsquelleAutor der Antwort Nikolai Samteladze
Wenn Sie wirklich wollen einen one-liner und nicht planen, nicht self-host-Web-API:
InformationsquelleAutor der Antwort zacharydl
Oben Antworten erfordern einen Verweis auf System.Web zu können, wandeln Sie die Eigenschaft HttpContext oder HttpContextWrapper. Wenn Sie nicht möchten, dass die Referenz, Sie sind in der Lage, um die ip über einen dynamischen:
InformationsquelleAutor der Antwort Robin van der Knaap
Die Lösung von carlosfigueira funktioniert, aber die Typ-sicheren " one-Liner sind besser: Fügen Sie eine
using System.Web
dann ZugriffHttpContext.Current.Request.UserHostAddress
im action-Methode.InformationsquelleAutor der Antwort Warren Rumak