¿Puede decirme cómo obtener la dirección IP del cliente en ASP.NET cuando no se utiliza MVC 6. Request.ServerVariables["REMOTE_ADDR"]
?
c#
asp.net-core
asp.net-core-mvc
Eadam
fuente
fuente
httpContext.GetFeature<IHttpConnectionFeature>().RemoteIpAddress
Respuestas:
La API ha sido actualizada. No estoy seguro de cuándo cambió, pero según Damien Edwards a fines de diciembre, ahora puede hacer esto:
fuente
RemoteIpAddress
es siemprenull
para mí, cuando publico que el sitio web en IIS y log esto en un archivo.En project.json agregue una dependencia a:
En
Startup.cs
, en elConfigure()
método agregue:Y por supuesto:
Entonces, podría obtener la ip usando:
En mi caso, al depurar en VS siempre obtuve el host local IpV6, pero cuando lo implementaba en un IIS siempre obtenía la IP remota.
Algunos enlaces útiles: ¿Cómo obtengo la dirección IP del cliente en ASP.NET CORE? y RemoteIpAddress siempre es nulo
El
::1
es quizás debido a:fuente
Se puede agregar alguna lógica de respaldo para manejar la presencia de un equilibrador de carga.
Además, a través de la inspección, el
X-Forwarded-For
encabezado se establece de todos modos, incluso sin un equilibrador de carga (¿posiblemente debido a una capa de cernícalo adicional?):Supuestos
_httpContextAccessor
fueron proporcionados a través de DI.fuente
Puede usar el
IHttpConnectionFeature
para obtener esta información.fuente
httpContext.GetFeature<IHttpConnectionFeature>()
siempre senull
.fuente
HttpContext.Connection.RemoteIpAddress
.En ASP.NET 2.1, en StartUp.cs, agregue estos servicios:
y luego haz 3 pasos:
Defina una variable en su controlador MVC
DI en el constructor del controlador
Recuperar la dirección IP
Así es como se hace.
fuente
::1
es localhost en IPv6. El equivalente IPv4 de127.0.0.1
Esto funciona para mí (DotNetCore 2.1)
fuente
En mi caso, tengo la aplicación web DotNet Core 2.2 ejecutándose en DigitalOcean con docker y nginx como proxy inverso. Con este código en Startup.cs puedo obtener la IP del cliente
:: ffff: 172.17.0.1 era la ip que estaba recibiendo antes de usar
fuente
Primero, en .Net Core 1.0 Agregar
using Microsoft.AspNetCore.Http.Features;
al controlador Luego dentro del método relevante:Leí varias otras respuestas que no se pudieron compilar porque estaba usando un httpContext en minúscula, lo que llevó al VS a agregar usando Microsoft.AspNetCore.Http, en lugar del uso apropiado, o con HttpContext (el compilador también es engañoso).
fuente
obtener ipaddress y hostname en .net core
poner este código en el controlador
Sigue estos pasos:
fuente
Descubrí que algunos de ustedes descubrieron que la dirección IP que obtienen es ::: 1 o 0.0.0.1
Este es el problema porque intenta obtener IP de su propia máquina y la confusión de C # que intenta devolver IPv6.
Entonces, implemento la respuesta de @Johna ( https://stackoverflow.com/a/41335701/812720 ) y @David ( https://stackoverflow.com/a/8597351/812720 ), ¡Gracias a ellos!
y aquí a la solución:
agregue el paquete Microsoft.AspNetCore.HttpOverrides en sus referencias (dependencias / paquetes)
agregue esta línea en Startup.cs
para obtener IPAddress, use este código en cualquiera de sus Controller.cs
y ahora puede obtener la dirección IPv4 de remoteIpAddress o resultado
fuente
prueba esto.
fuente
Ejecutar
.NET core
(3.1.4)IIS
detrás de un equilibrador de carga no funcionó con otras soluciones sugeridas.Lectura manual del
X-Forwarded-For
encabezado hace.Estoy ejecutando un paquete autónomo usando el paquete de alojamiento .
fuente
Al ejecutar ASP.NET Core 2.1 detrás de un proxy inverso de Traefik en Ubuntu, necesito configurar su IP de puerta de enlace
KnownProxies
después de instalar elMicrosoft.AspNetCore.HttpOverrides
paquete oficialDe acuerdo con la documentación , esto es necesario si el proxy inverso no se ejecuta en localhost. El
docker-compose.yml
de Traefik ha asignado una dirección IP estática:Alternativamente, debería ser suficiente para asegurarse de que una red conocida esté definida aquí para especificar su puerta de enlace en .NET Core.
fuente