У моей компании есть множество программных продуктов, которые могут записывать IP-адреса.Каждый продукт делает это по-своему, будь то с помощью HttpContext.Request.UserHostAddress
или какой-либо серверной переменной (HTTP_X_FORWARDED_FOR
, HTTP_CLIENT_IP
или REMOTE_ADDR
) или одним или двумя другими способами.
Недавно мы переместили центры обработки данныхи наши 3 веб-сервера находятся в балансировщике нагрузки.Большинство из этих решений теперь записывают IP-адрес балансировщика нагрузки вместо фактического IP-адреса конечного пользователя.Согласно моим исследованиям, HTTP_X_FORWARDED_FOR
должен дать нам желаемый IP-адрес (как только мы правильно настроим IIS / балансировщик нагрузки).
Я создал DLL, которую я хотел бы подключить к остальным нашим приложениям.:
using System.Web.Mvc;
namespace MyIpReader
{
public class IpReader : Controller
{
public string GetXForwardIp()
{
if (Request == null || Request.ServerVariables["HTTP_X_FORWARDED_FOR"] == null)
return System.Web.HttpContext.Current.Request.UserHostAddress;
return Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
}
}
Я добавил эту DLL в один из наших проектов и запустил ее, но объект Request
всегда null
, поэтому он возвращает UserHostAddress
.
Почему это так, и что более важно, как я могу это исправить?
Если это имеет значение: мой MyIpReader
проект - .NET 4.5, а в System.Web.Mvc
DLL написано Runtime Version v4.0.30319
и само фактическое свойство Version
.это 5.2.3.0