2012-01-27 14 views

risposta

10

È possibile ottenere l'indirizzo IP dell'utente in una classe statica come questa:

 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; 

Questa tecnica è meglio utilizzare tale Request.UserHostAddress() in quanto a volte acquisisce solo l'indirizzo IP del proxy di un utente.

+0

provoca "Richiesta non è disponibile in questo errore contesto" – oneNiceFriend

1

È possibile passare HttpContext.Current dal parametro di controller per StaticClass ma è una cattiva prassi.

Un migliori pratiche è nel costruttore del controller ottenere l'interfaccia di implementare classe.

private readonly IService _service; 

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

e nella classe di servizio

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

quindi utilizzare CIO Containner (Ninject, autofac ecc) per risolvere i dipendenze

exemple in autofac (global.asax)

builder.RegisterControllers(typeof(MvcApplication).Assembly); 
builder.RegisterModule(new AutofacWebTypesModule()); 
builder.RegisterType<Service>().As<IService>().InstancePerLifetimeScope(); 
Problemi correlati