как получить IP-адрес клиента в статическом классе в asp.net MVC - PullRequest
11 голосов
/ 27 января 2012

Я хочу получить IP-адрес клиента в static class в asp.net mvc 3.

Но я не могу получить доступ к объекту запроса в статическом классе.

Может ли кто-нибудь помочь, как получить IP-адрес без объекта запроса в статическом классе ??

Ответы [ 2 ]

12 голосов
/ 27 января 2012

Вы можете получить IP-адрес пользователя в статическом классе, например, так:

        string ip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if (string.IsNullOrEmpty(ip))
        {
            ip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
        }
        return ip;

Этот метод лучше использовать для этого Request.UserHostAddress (), поскольку иногда он только захватывает IP-адрес пользователя.прокси.

1 голос
/ 27 января 2012

вы можете передать HttpContext.Current по параметру контроллера в StaticClass, но это плохая практика.

A Передовой опыт в конструкторе Controller - получить интерфейс класса реализации.

 private readonly IService _service;

        public HomeController(IService service)
        {
            _service = service;
        } 

и в классе обслуживания

 private readonly HttpContextBase _httpContext;
  public Service (HttpContextBase httpContext)
        {
            _httpContext= httpContext;
        } 

затем используйте контейнер IOC (Ninject, AutoFac и т. д.) для разрешения разрешений

пример в AutoFac (global.asax)

builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterModule(new AutofacWebTypesModule());
builder.RegisterType<Service>().As<IService>().InstancePerLifetimeScope();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...