Ситуация и проблема
Есть приложение ASP.NET MVC. В приложении записывааются IP адреса клиентов для статистики через
Request.UserHostAddress
В какой то момент понадобилась переадресация с http на https, которая была сделана через рерайт в веб-конфиге. И значение Request.UserHostAddress стало показывать всегда один и тот же адрес (адрес сервера хостинга).
Решение
Использовать поле
Request.Headers["X-Forwarded-For"]
в нем, в моем случае, через запятую были 2 IP-адреса. Взяли из них первый.
Код получился примерно такой
var IPv4Address = "";
var headerValueXForwerdedFor = request.Headers["X-Forwarded-For"];
if (string.IsNullOrWhiteSpace(headerValueXForwerdedFor))
{
IPv4Address = request?.UserHostAddress;
}
else
{
var XForwardedForIpAddress = headerValueXForwerdedFor;
var commaindex = headerValueXForwerdedFor.IndexOf(',');
if (commaindex > 0)
{
XForwardedForIpAddress = headerValueXForwerdedFor.Substring(0, commaindex);
}
IPv4Address = XForwardedForIpAddress;
}
Что помогло:
статья со StackOwerflow
Комментариев нет:
Отправить комментарий