2008-12-09 13 views
14

में उपयोगकर्ता नाम/पहचान कैसे प्राप्त करते हैं मुझे प्रोग्रामिंग रूप से सी # का उपयोग करके उपयोगकर्ता नाम खोजने की आवश्यकता है। विशेष रूप से, मैं वर्तमान प्रक्रिया से जुड़ा सिस्टम/नेटवर्क उपयोगकर्ता प्राप्त करना चाहता हूं। मैं एक वेब अनुप्रयोग लिख रहा हूं जो विंडोज एकीकृत सुरक्षा का उपयोग करता है।सी #

+0

आपका प्रश्न बहुत अस्पष्ट है। क्या आप एक एसक्यूएल क्वेरी लिखने की कोशिश कर रहे हैं? कुछ एपीआई का प्रयोग करें? सक्रिय निर्देशिका से जानकारी प्राप्त करें? कृपया _exactly_ जो आप पूरा करने का प्रयास कर रहे हैं उसे समझाएं। – Juliet

+0

क्षमा करें मैं अधिक विशिष्ट होने के लिए प्रश्न संपादित कर रहा हूं। – minty

उत्तर

16

आवेदन के संदर्भ पर निर्भर करता है। आप Environment.UserName (कंसोल) या HttpContext.Current.User.Identity.Name (वेब) का उपयोग कर सकते हैं। ध्यान दें कि विंडोज एकीकृत प्रमाणीकरण का उपयोग करते समय, आपको उपयोगकर्ता नाम से डोमेन को हटाने की आवश्यकता हो सकती है। साथ ही, आप वर्तमान उपयोगकर्ता संदर्भ से संदर्भित करने के बजाय कोडबेइंड में पृष्ठ की उपयोगकर्ता प्रॉपर्टी का उपयोग कर वर्तमान उपयोगकर्ता प्राप्त कर सकते हैं।

33

पहचान का पृथक दृश्य अक्सर IPrincipal/IIdentity है:

IPrincipal principal = Thread.CurrentPrincipal; 
IIdentity identity = principal == null ? null : principal.Identity; 
string name = identity == null ? "" : identity.Name; 

यह वही कोड कई अलग अलग मॉडल (WinForm, asp.net, WCF, आदि) में काम करने की अनुमति देता है - लेकिन यह पर निर्भर करता है पहचान अग्रिम में सेट की जा रही है (क्योंकि यह एप्लिकेशन-परिभाषित है)। उदाहरण के लिए, एक WinForm में आप उपयोग कर सकते हैं वर्तमान उपयोगकर्ता के खिड़कियों पहचान:

Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 

हालांकि, प्रिंसिपल भी पूरी तरह से bespoke हो सकता है - यह जरूरी खिड़कियों से संबंधित नहीं है खातों आदि एक और एप्लिकेशन को प्रवेश स्क्रीन का उपयोग कर सकते मनमाने ढंग से उन पर लॉग ऑन करने की अनुमति के लिए:

string userName = "Fred"; // todo 
string[] roles = { "User", "Admin" }; // todo 
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(userName), roles); 
+0

एक छोटा सा अतिरिक्त। कुछ मामलों में आप अपने आवेदन के धागे के लिए एक [डिफ़ॉल्ट प्रिंसिपल] (https://msdn.microsoft.com/en-us/library/system.appdomain.setthreadprincipal (v = vs.110) .aspx) सेट करना चाह सकते हैं डोमेन। यह इस 'AppDomain.CurrentDomain.SetThreadPrincipal (myPrincipal) की तरह किया जा सकता है; ' – Korli

3
string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name ; 
+4

जबकि यह कोड ब्लॉक प्रश्न का उत्तर दे सकता है, तो यह सबसे अच्छा होगा अगर आप ऐसा क्यों कर सकते हैं इसके लिए कुछ स्पष्टीकरण प्रदान कर सकते हैं। – DavidPostill