Как ссылаться на объект запроса из связанной библиотеки DLL? - PullRequest
0 голосов
/ 05 октября 2018

У моей компании есть множество программных продуктов, которые могут записывать 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

1 Ответ

0 голосов
/ 05 октября 2018

Запрос должен оцениваться в контексте веб-запроса.

Я предлагаю вам следующее решение:

namespace MyIpReader
{
    public class IpReader : Controller
    {
        private string HttpRequest request;

        public IpReader(HttpRequest request) 
        {
            this.request = request;
        }

        public string GetXForwardIp()
        {
            if (this.request == null || this.request.ServerVariables["HTTP_X_FORWARDED_FOR"] == null)
                return System.Web.HttpContext.Current.Request.UserHostAddress;

            return this.request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...