Können Sie bitte lassen Sie mich wissen , wie Adresse Client - IP in ASP.NET zu erhalten , wenn mit MVC 6. Request.ServerVariables["REMOTE_ADDR"]
funktioniert nicht.
c#
asp.net-core
asp.net-core-mvc
eadam
quelle
quelle
httpContext.GetFeature<IHttpConnectionFeature>().RemoteIpAddress
Antworten:
Die API wurde aktualisiert. Ich bin mir nicht sicher, wann es sich geändert hat, aber laut Damien Edwards Ende Dezember können Sie dies jetzt tun:
quelle
RemoteIpAddress
ist immernull
für mich, wenn ich die Website auf IIS veröffentliche und diese in einer Datei protokolliere.Fügen Sie in project.json eine Abhängigkeit hinzu zu:
In
Startup.cs
derConfigure()
Methode hinzufügen:Und natürlich:
Dann könnte ich die IP bekommen mit:
In meinem Fall bekam ich beim Debuggen in VS immer IpV6 localhost, aber wenn ich auf einem IIS bereitgestellt wurde, bekam ich immer die Remote-IP.
Einige nützliche Links: Wie erhalte ich die Client-IP-Adresse in ASP.NET CORE? und RemoteIpAddress ist immer null
Das
::1
liegt vielleicht an:quelle
Einige Fallback-Logik kann hinzugefügt werden, um das Vorhandensein eines Load Balancers zu behandeln.
Durch Inspektion wird der
X-Forwarded-For
Header auch ohne Load Balancer gesetzt (möglicherweise aufgrund einer zusätzlichen Kestrel-Ebene?):Angenommen,
_httpContextAccessor
wurde durch DI bereitgestellt.quelle
Sie können das verwenden
IHttpConnectionFeature
, um diese Informationen zu erhalten.quelle
httpContext.GetFeature<IHttpConnectionFeature>()
Sei in meiner Demo immernull
.quelle
HttpContext.Connection.RemoteIpAddress
.Fügen Sie in ASP.NET 2.1 in StartUp.cs diese Dienste hinzu:
und dann 3 Schritte machen:
Definieren Sie eine Variable in Ihrem MVC-Controller
DI in den Konstruktor der Steuerung
Rufen Sie die IP-Adresse ab
So wird es gemacht.
quelle
::1
ist localhost in IPv6. Das IPv4-Äquivalent von127.0.0.1
Das funktioniert bei mir (DotNetCore 2.1)
quelle
In meinem Fall läuft DotNet Core 2.2 Web App auf DigitalOcean mit Docker und Nginx als Reverse-Proxy. Mit diesem Code in Startup.cs kann ich die Client-IP erhalten
:: ffff: 172.17.0.1 war die IP, die ich vor der Verwendung erhalten habe
quelle
Zuerst in .Net Core 1.0
using Microsoft.AspNetCore.Http.Features;
Zum Controller hinzufügen Dann innerhalb der entsprechenden Methode:Ich habe mehrere andere Antworten gelesen, die nicht kompiliert werden konnten, weil ein httpContext in Kleinbuchstaben verwendet wurde. Dies führte dazu, dass der VS mithilfe von Microsoft.AspNetCore.Http anstelle der entsprechenden Verwendung oder mit HttpContext hinzugefügt wurde (der Compiler ist ebenfalls irreführend).
quelle
Holen Sie sich die IP-Adresse und den Hostnamen im .net-Kern
Geben Sie diesen Code in die Steuerung ein
Folge diesen Schritten:
quelle
Ich habe festgestellt, dass einige von Ihnen festgestellt haben, dass die IP-Adresse, die Sie erhalten, ::: 1 oder 0.0.0.1 ist
Dies ist das Problem, weil Sie versuchen, IP von Ihrem eigenen Computer abzurufen, und die Verwirrung von C #, die versucht, IPv6 zurückzugeben.
Also implementiere ich die Antwort von @Johna ( https://stackoverflow.com/a/41335701/812720 ) und @David ( https://stackoverflow.com/a/8597351/812720 ). Danke an sie!
und hier zur Lösung:
Fügen Sie das Microsoft.AspNetCore.HttpOverrides-Paket in Ihre Referenzen ein (Abhängigkeiten / Pakete).
Fügen Sie diese Zeile in Startup.cs hinzu
Verwenden Sie diesen Code in einer Ihrer Controller.cs, um IPAddress zu erhalten
und jetzt können Sie die IPv4-Adresse von remoteIpAddress oder result erhalten
quelle
Versuche dies.
quelle
Das Ausführen
.NET core
(3.1.4)IIS
hinter einem Load Balancer funktionierte nicht mit anderen vorgeschlagenen Lösungen.Das manuelle Lesen des
X-Forwarded-For
Headers funktioniert.Ich verwende ein eigenständiges Paket mit dem Hosting- Paket .
quelle
Wenn ich ASP.NET Core 2.1 hinter einem Traefik-Reverse-Proxy unter Ubuntu ausführe, muss ich
KnownProxies
nach der Installation des offiziellenMicrosoft.AspNetCore.HttpOverrides
Pakets die Gateway-IP festlegenLaut Dokumentation ist dies erforderlich, wenn der Reverse-Proxy nicht auf localhost ausgeführt wird. The
docker-compose.yml
of Traefik hat eine statische IP-Adresse vergeben:Alternativ sollte es ausreichen, sicherzustellen, dass hier ein bekanntes Netzwerk definiert ist, um sein Gateway in .NET Core anzugeben.
quelle