2012-01-27 17 views
10

में स्थैतिक वर्ग में क्लाइंट आईपी पता कैसे प्राप्त करें मैं में static class में क्लाइंट का आईपी पता प्राप्त करना चाहता हूं।एएसपीनेट एमवीसी

लेकिन मैं स्थिर वर्ग में अनुरोध ऑब्जेक्ट तक नहीं पहुंच सकता।

कोई भी स्थिर वर्ग में अनुरोध ऑब्जेक्ट के बिना आईपी पता कैसे प्राप्त कर सकता है ??

उत्तर

10

आप इस तरह के स्थैतिक वर्ग में उपयोगकर्ता का आईपी पता प्राप्त कर सकते हैं:

 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() का उपयोग करने के लिए बेहतर है क्योंकि कभी-कभी उपयोगकर्ता के प्रॉक्सी का आईपी पता कैप्चर करेगा।

+0

इसका कारण है "अनुरोध इस संदर्भ त्रुटि में उपलब्ध नहीं है" – oneNiceFriend

1

आप StaticClass पर नियंत्रक के पैरामीटर द्वारा HttpContext.Current पास कर सकते हैं लेकिन एक खराब प्रथा है।

नियंत्रक के कन्स्ट्रक्टर में एक सर्वोत्तम प्रथाओं को कार्यान्वयन वर्ग का इंटरफेस मिलता है।

private readonly IService _service; 

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

और सेवा वर्ग में

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

तो संकल्प dependences के लिए आईओसी Containner (Ninject, AutoFac आदि) का उपयोग

AutoFac (Global.asax) में

उदाहरण

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