Você pode me informar como obter o endereço IP do cliente no ASP.NET ao usar o MVC 6. Request.ServerVariables["REMOTE_ADDR"]
não funciona.
c#
asp.net-core
asp.net-core-mvc
eadam
fonte
fonte
httpContext.GetFeature<IHttpConnectionFeature>().RemoteIpAddress
Respostas:
A API foi atualizada. Não sabe ao certo quando foi alterado, mas de acordo com Damien Edwards no final de dezembro, agora você pode fazer isso:
fonte
RemoteIpAddress
é semprenull
para mim, quando publico o site no IIS e o registro em um arquivo.No project.json, adicione uma dependência para:
Em
Startup.cs
, noConfigure()
método, adicione:E claro:
Então, eu poderia obter o ip usando:
No meu caso, ao depurar no VS, sempre obtive o host local IpV6, mas quando implantado em um IIS obtive sempre o IP remoto.
Alguns links úteis: Como obtenho o endereço IP do cliente no ASP.NET CORE? e RemoteIpAddress é sempre nulo
A
::1
é talvez por causa de:fonte
Alguma lógica de fallback pode ser adicionada para lidar com a presença de um Load Balancer.
Além disso, através da inspeção, o
X-Forwarded-For
cabeçalho é definido de qualquer maneira, mesmo sem um Load Balancer (possivelmente por causa da camada adicional do Kestrel?):Supõe que
_httpContextAccessor
foi fornecido através do DI.fonte
Você pode usar o
IHttpConnectionFeature
para obter essas informações.fonte
httpContext.GetFeature<IHttpConnectionFeature>()
seja semprenull
.fonte
HttpContext.Connection.RemoteIpAddress
.No ASP.NET 2.1, no StartUp.cs, adicione este serviço:
e depois faça 3 etapas:
Defina uma variável no seu controlador MVC
DI no construtor do controlador
Recuperar o endereço IP
É assim que se faz.
fonte
::1
é localhost no IPv6. O equivalente ao IPv4 de127.0.0.1
Isso funciona para mim (DotNetCore 2.1)
fonte
No meu caso, tenho o DotNet Core 2.2 Web App em execução no DigitalOcean com docker e nginx como proxy reverso. Com esse código em Startup.cs, posso obter o IP do cliente
:: ffff: 172.17.0.1 foi o ip que eu estava recebendo antes de usar
fonte
Primeiro, no .Net Core 1.0 Adicione
using Microsoft.AspNetCore.Http.Features;
ao controlador Em seguida, dentro do método relevante:Li várias outras respostas que não foram compiladas porque estava usando um httpContext em minúsculas, levando o VS a adicionar usando Microsoft.AspNetCore.Http, em vez do uso apropriado, ou com HttpContext (o compilador também é enganoso).
fonte
obtenha ipaddress e hostname no núcleo .net
coloque esse código no controlador
Siga esses passos:
fonte
Descobri que alguns de vocês descobriram que o endereço IP obtido é ::: 1 ou 0.0.0.1
Esse é o problema porque você tenta obter IP da sua própria máquina e a confusão de C # que tenta retornar o IPv6.
Portanto, implementei a resposta de @Johna ( https://stackoverflow.com/a/41335701/812720 ) e @David ( https://stackoverflow.com/a/8597351/812720 ), obrigado a eles!
e aqui para solução:
adicione Microsoft.AspNetCore.HttpOverrides Package nas suas referências (dependências / pacotes)
adicione esta linha em Startup.cs
para obter o IPAddress, use esse código em qualquer um dos seus Controller.cs
e agora você pode obter o endereço IPv4 de remoteIpAddress ou result
fonte
tente isso.
fonte
Executando
.NET core
(3.1.4) emIIS
atrás de um balanceador de carga não funcionou com outras soluções sugeridas.A leitura manual do
X-Forwarded-For
cabeçalho faz.Estou executando um pacote independente usando o pacote de hospedagem .
fonte
Executando o ASP.NET Core 2.1 atrás de um Proxy reverso Traefik no Ubuntu, preciso definir o IP do gateway
KnownProxies
depois de instalar oMicrosoft.AspNetCore.HttpOverrides
pacote oficialDe acordo com a documentação , isso é necessário se o proxy reverso não estiver em execução no host local. O
docker-compose.yml
Traefik atribuiu um endereço IP estático:Como alternativa, deve ser suficiente garantir que uma rede conhecida seja definida aqui para especificar seu gateway no .NET Core.
fonte