Подскажите пожалуйста, как мне получить IP-адрес клиента в ASP.NET при использовании MVC 6. Request.ServerVariables["REMOTE_ADDR"]
Не работает.
206
Подскажите пожалуйста, как мне получить IP-адрес клиента в ASP.NET при использовании MVC 6. Request.ServerVariables["REMOTE_ADDR"]
Не работает.
httpContext.GetFeature<IHttpConnectionFeature>().RemoteIpAddress
Ответы:
API был обновлен. Не уверен, когда это изменилось, но, по словам Дэмиена Эдвардса в конце декабря, теперь вы можете сделать это:
источник
RemoteIpAddress
всегдаnull
для меня, когда я публикую его веб-сайт на IIS и регистрирую это в файле.В project.json добавьте зависимость к:
В
Startup.cs
, вConfigure()
метод добавить:И, конечно же:
Затем я мог бы получить IP с помощью:
В моем случае при отладке в VS я всегда получал локальный хост IpV6, но при развертывании на IIS я всегда получал удаленный IP.
Некоторые полезные ссылки: Как получить IP-адрес клиента в ASP.NET CORE? и RemoteIpAddress всегда равен нулю
Это
::1
может быть из-за:источник
Некоторая резервная логика может быть добавлена для обработки присутствия балансировщика нагрузки.
Кроме того, путем проверки
X-Forwarded-For
заголовок в любом случае устанавливается даже без балансировщика нагрузки (возможно, из-за дополнительного слоя Kestrel?):Предполагается,
_httpContextAccessor
был предоставлен через DI.источник
Вы можете использовать
IHttpConnectionFeature
для получения этой информации.источник
httpContext.GetFeature<IHttpConnectionFeature>()
всегда будьnull
.источник
HttpContext.Connection.RemoteIpAddress
.Это работает для меня (DotNetCore 2.1)
источник
В ASP.NET 2.1, в StartUp.cs добавить эти службы:
а затем сделать 3 шага:
Определите переменную в вашем контроллере MVC
DI в конструктор контроллера
Получить IP-адрес
Вот как это делается.
источник
::1
это локальный хост в IPv6. Эквивалент IPv4127.0.0.1
В моем случае у меня есть приложение DotNet Core 2.2 Web, работающее на DigitalOcean с докером и nginx в качестве обратного прокси-сервера. С помощью этого кода в Startup.cs я могу получить IP-адрес клиента
:: ffff: 172.17.0.1 был ip, который я получал перед использованием
источник
Сначала в .Net Core 1.0 Добавить
using Microsoft.AspNetCore.Http.Features;
в контроллер. Затем внутри соответствующего метода:Я прочитал несколько других ответов, которые не удалось скомпилировать, поскольку он использовал строчный httpContext, что привело к добавлению VS с использованием Microsoft.AspNetCore.Http вместо соответствующего использования или с HttpContext (компилятор также вводит в заблуждение).
источник
получить IP-адрес и имя хоста в ядре .net
поместите этот код в контроллер
Следуй этим шагам:
источник
Я обнаружил, что некоторые из вас обнаружили, что IP-адрес, который вы получаете: ::: 1 или 0.0.0.1
Это проблема из-за того, что вы пытаетесь получить IP с вашего собственного компьютера, и из-за путаницы в C #, которая пытается вернуть IPv6.
Итак, я реализую ответ от @Johna ( https://stackoverflow.com/a/41335701/812720 ) и @David ( https://stackoverflow.com/a/8597351/812720 ), спасибо им!
а вот к решению:
добавить пакет Microsoft.AspNetCore.HttpOverrides в ваши ссылки (зависимости / пакеты)
добавить эту строку в Startup.cs
чтобы получить IP-адрес, используйте этот код в любом из ваших Controller.cs
и теперь вы можете получить IPv4-адрес из remoteIpAddress или результат
источник
попробуй это.
источник
Запуск
.NET core
(3.1.4)IIS
за балансировщиком нагрузки не работал с другими предлагаемыми решениями.Чтение
X-Forwarded-For
заголовка вручную .Я запускаю автономный пакет, используя пакет хостинга .
источник
При запуске ASP.NET Core 2.1 за обратным прокси-сервером Traefik в Ubuntu, мне нужно установить IP-адрес шлюза
KnownProxies
после установки официальногоMicrosoft.AspNetCore.HttpOverrides
пакетаСогласно документации , это требуется, если обратный прокси-сервер не работает на localhost.
docker-compose.yml
Из Traefik назначил статический IP - адрес:В качестве альтернативы, этого должно быть достаточно, чтобы убедиться, что здесь определена известная сеть, чтобы указать ее шлюз в .NET Core.
источник