Czy możesz dać mi znać, jak uzyskać adres IP klienta w ASP.NET, gdy używasz MVC 6. Request.ServerVariables["REMOTE_ADDR"]
nie działa.
c#
asp.net-core
asp.net-core-mvc
eadam
źródło
źródło
httpContext.GetFeature<IHttpConnectionFeature>().RemoteIpAddress
Odpowiedzi:
Interfejs API został zaktualizowany. Nie jestem pewien, kiedy to się zmieniło, ale według Damiena Edwardsa pod koniec grudnia możesz teraz to zrobić:
źródło
RemoteIpAddress
jest zawszenull
dla mnie, kiedy publikuję stronę internetową w IIS i loguję to do pliku.W project.json dodaj zależność do:
W
Startup.cs
wConfigure()
metodzie dodatku:I oczywiście:
Następnie mogę uzyskać adres IP za pomocą:
W moim przypadku podczas debugowania w VS zawsze otrzymywałem localhost IpV6, ale po wdrożeniu na IIS zawsze otrzymywałem zdalne IP.
Kilka przydatnych linków: Jak uzyskać adres IP klienta w rdzeniu ASP.NET? a adres RemoteIpAddress jest zawsze zerowy
::1
Jest być może ze względu na:źródło
Można dodać pewną logikę zastępczą, aby obsłużyć obecność modułu równoważenia obciążenia.
Ponadto, po sprawdzeniu,
X-Forwarded-For
nagłówek i tak jest ustawiany nawet bez modułu równoważenia obciążenia (być może z powodu dodatkowej warstwy pustki?):Zakłada się, że
_httpContextAccessor
dostarczono przez DI.źródło
Możesz użyć
IHttpConnectionFeature
do uzyskania tej informacji.źródło
httpContext.GetFeature<IHttpConnectionFeature>()
zawsze bądźnull
.źródło
HttpContext.Connection.RemoteIpAddress
.To działa dla mnie (DotNetCore 2.1)
źródło
W ASP.NET 2.1, w StartUp.cs Dodaj te usługi:
a następnie wykonaj 3 kroki:
Zdefiniuj zmienną w kontrolerze MVC
DI do konstruktora kontrolera
Pobierz adres IP
Tak to się robi.
źródło
::1
jest hostem lokalnym w IPv6. Odpowiednik IPv4127.0.0.1
W moim przypadku aplikacja internetowa DotNet Core 2.2 działa na DigitalOcean z dokerem i nginx jako odwrotnym proxy. Dzięki temu kodowi w Startup.cs mogę uzyskać adres IP klienta
:: ffff: 172.17.0.1 był ip, który otrzymywałem przed użyciem
źródło
Najpierw w .Net Core 1.0 Dodaj
using Microsoft.AspNetCore.Http.Features;
do kontrolera Następnie w odpowiedniej metodzie:Przeczytałem kilka innych odpowiedzi, których nie udało się skompilować, ponieważ używałem małych liter httpContext, co spowodowało, że VS dodał, używając Microsoft.AspNetCore.Http, zamiast odpowiedniego użycia lub z HttpContext (kompilator również wprowadza w błąd).
źródło
Uzyskaj adres IP i nazwę hosta w rdzeniu .net
umieść ten kod w kontrolerze
Wykonaj następujące kroki:
źródło
Odkryłem, że niektórzy z was stwierdzili, że otrzymany adres IP to ::: 1 lub 0.0.0.1
Jest to problem, ponieważ próbujesz uzyskać adres IP z własnego komputera i zamieszanie w C #, które próbują zwrócić IPv6.
Tak więc implementuję odpowiedź z @Johna ( https://stackoverflow.com/a/41335701/812720 ) i @David ( https://stackoverflow.com/a/8597351/812720 ), dzięki nim!
i tutaj do rozwiązania:
dodaj pakiet Microsoft.AspNetCore.HttpOverrides w swoich referencjach (zależności / pakiety)
dodaj tę linię w Startup.cs
aby uzyskać adres IP, użyj tego kodu w dowolnym pliku Controller.cs
a teraz możesz uzyskać adres IPv4 ze zdalnego adresu IP lub wyniku
źródło
Spróbuj tego.
źródło
Uruchomienie
.NET core
(3.1.4)IIS
za modułem równoważenia obciążenia nie działało z innymi sugerowanymi rozwiązaniami.Czyta ręcznie
X-Forwarded-For
nagłówek.Używam autonomiczny pakiet użyciu pakiet hostingu .
źródło
Uruchamiając ASP.NET Core 2.1 za odwrotnym proxy Traefik na Ubuntu, muszę ustawić adres IP bramy
KnownProxies
po zainstalowaniu oficjalnegoMicrosoft.AspNetCore.HttpOverrides
pakietuZgodnie z dokumentacją jest to wymagane, jeśli odwrotne proxy nie działa na localhost.
docker-compose.yml
Z Traefik ma przypisany statyczny adres IP:Ewentualnie powinno wystarczyć upewnienie się, że zdefiniowano tutaj znaną sieć, aby określić jej bramę w .NET Core.
źródło