Pouvez-vous s'il vous plaît laissez-moi savoir comment obtenir l'adresse IP du client dans ASP.NET lorsque l'utilisation de MVC 6. Request.ServerVariables["REMOTE_ADDR"]
ne fonctionne pas.
202
Pouvez-vous s'il vous plaît laissez-moi savoir comment obtenir l'adresse IP du client dans ASP.NET lorsque l'utilisation de MVC 6. Request.ServerVariables["REMOTE_ADDR"]
ne fonctionne pas.
httpContext.GetFeature<IHttpConnectionFeature>().RemoteIpAddress
Réponses:
L'API a été mise à jour. Je ne sais pas quand cela a changé, mais selon Damien Edwards fin décembre, vous pouvez maintenant le faire:
la source
RemoteIpAddress
toujoursnull
pour moi, lorsque je publie le site Web sur IIS et que je l'enregistre dans un fichier.Dans project.json, ajoutez une dépendance à:
Dans
Startup.cs
, dans laConfigure()
méthode, ajoutez:Et bien sûr:
Ensuite, je pouvais obtenir l'ip en utilisant:
Dans mon cas, lors du débogage dans VS, j'ai toujours obtenu l'hôte local IpV6, mais lors du déploiement sur un IIS, j'ai toujours eu l'IP distante.
Quelques liens utiles: Comment obtenir l'adresse IP du client dans ASP.NET CORE? et RemoteIpAddress est toujours null
C'est
::1
peut-être à cause de:la source
Une logique de secours peut être ajoutée pour gérer la présence d'un équilibreur de charge.
De plus, grâce à l'inspection, l'en-
X-Forwarded-For
tête est de toute façon défini même sans Load Balancer (peut-être à cause d'une couche Kestrel supplémentaire?):Suppose que l'ID a
_httpContextAccessor
été fourni.la source
Vous pouvez utiliser le
IHttpConnectionFeature
pour obtenir ces informations.la source
httpContext.GetFeature<IHttpConnectionFeature>()
soyez toujoursnull
.la source
HttpContext.Connection.RemoteIpAddress
.Dans ASP.NET 2.1, dans StartUp.cs, ajoutez ces services:
puis faites 3 étapes:
Définissez une variable dans votre contrôleur MVC
DI dans le constructeur du contrôleur
Récupérer l'adresse IP
Voilà comment cela se fait.
la source
::1
est localhost dans IPv6. L'équivalent IPv4 de127.0.0.1
Cela fonctionne pour moi (DotNetCore 2.1)
la source
Dans mon cas, j'ai l'application Web DotNet Core 2.2 exécutée sur DigitalOcean avec docker et nginx comme proxy inverse. Avec ce code dans Startup.cs, je peux obtenir l'adresse IP du client
:: ffff: 172.17.0.1 était l'adresse IP que j'obtenais avant d'utiliser
la source
Tout d'abord, dans .Net Core 1.0 Ajouter
using Microsoft.AspNetCore.Http.Features;
au contrôleur Puis à l'intérieur de la méthode appropriée:J'ai lu plusieurs autres réponses qui n'ont pas pu être compilées car elles utilisaient un httpContext en minuscules, ce qui a conduit les VS à ajouter à l'aide de Microsoft.AspNetCore.Http, au lieu de l'utilisation appropriée, ou avec HttpContext (le compilateur est également trompeur).
la source
obtenir l'adresse IP et le nom d'hôte dans le noyau .net
mettre ce code dans le contrôleur
Suivez ces étapes:
la source
J'ai trouvé que certains d'entre vous ont trouvé que l'adresse IP que vous obtenez est ::: 1 ou 0.0.0.1
C'est le problème car vous essayez d'obtenir l'IP de votre propre machine et la confusion de C # qui essaie de renvoyer IPv6.
Donc, j'implémente la réponse de @Johna ( https://stackoverflow.com/a/41335701/812720 ) et @David ( https://stackoverflow.com/a/8597351/812720 ), merci à eux!
et ici à la solution:
ajouter le package Microsoft.AspNetCore.HttpOverrides dans vos références (dépendances / packages)
ajoutez cette ligne dans Startup.cs
pour obtenir IPAddress, utilisez ce code dans n'importe lequel de vos Controller.cs
et maintenant vous pouvez obtenir l'adresse IPv4 de remoteIpAddress ou du résultat
la source
essaye ça.
la source
L'exécution de
.NET core
(3.1.4)IIS
derrière un équilibreur de charge ne fonctionnait pas avec d'autres solutions suggérées.La lecture manuelle de l'en-
X-Forwarded-For
tête le fait.J'exécute un package autonome en utilisant le pack d'hébergement .
la source
En exécutant ASP.NET Core 2.1 derrière un proxy inverse Traefik sur Ubuntu, je dois définir son IP de passerelle
KnownProxies
après avoir installé leMicrosoft.AspNetCore.HttpOverrides
package officielSelon la documentation , cela est nécessaire si le proxy inverse ne fonctionne pas sur localhost. Le
docker-compose.yml
de Traefik a attribué une adresse IP statique:Alternativement, il devrait suffire de s'assurer qu'un réseau connu est défini ici pour spécifier sa passerelle dans .NET Core.
la source