Как получить клиентский IP-адрес в статическом классе в asp.net mvc
Я хочу получить ip-адрес клиента в static class
в asp.net mvc 3
.
Но я не могу получить доступ к объекту запроса в статическом классе.
может ли кто-нибудь помочь, как получить ip-адрес без объекта запроса в статическом классе?
Ответы
Ответ 1
Вы можете получить 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-адрес пользовательского прокси.
Ответ 2
вы можете передать HttpContext.Current по параметру контроллера в StaticClass, но это плохая практика.
Лучшая практика заключается в том, что конструктор Controller получает интерфейс класса реализации.
private readonly IService _service;
public HomeController(IService service)
{
_service = service;
}
и в классе обслуживания
private readonly HttpContextBase _httpContext;
public Service (HttpContextBase httpContext)
{
_httpContext= httpContext;
}
затем используйте IOC Containner (Ninject, AutoFac и т.д.) для зависимостей разрешения
пример в AutoFac (global.asax)
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterModule(new AutofacWebTypesModule());
builder.RegisterType<Service>().As<IService>().InstancePerLifetimeScope();