вторник, 6 октября 2020 г.

ASP.NET MVC: одинаковый IP адрес клиента (Request.UserHostAddress) после настройки переадресации с HTTP на HTTPS

Ситуация и проблема 

Есть приложение 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

https://stackoverflow.com/questions/15297620/request-userhostaddress-return-ip-address-of-load-balancer