2010-07-04 13 views
36

.NET में वर्तमान Windows उपयोगकर्ता नाम प्राप्त करने के कई तरीके दिखाई देते हैं। जिनमें से तीन हैं:विंडोज उपयोगकर्ता नाम प्राप्त करें - विभिन्न विधियां

string name = WindowsIdentity.GetCurrent().Name; 

या

string name = Thread.CurrentPrincipal.Identity.Name; 

या

string name = Environment.UserName; 

क्या अंतर है, और क्यों एक दूसरे के ऊपर विधि का चयन? क्या कोई और तरीका है?

+0

क्या System.Threading.Thread.CurrentPrincipal.Identity.Name' के बारे में '?? –

+1

@marc_s: आपका सुझाव जोड़ा गया। – Andy

उत्तर

31

पर्यावरण। उपयोगकर्ता नाम advapi32.dll के भीतर GetUserName को कॉल करता है। इसका मतलब है कि यदि आप किसी अन्य उपयोगकर्ता का प्रतिरूपण कर रहे हैं, तो यह संपत्ति उस पर प्रतिबिंबित होगी।

थ्रेड। वर्तमान प्रिंसिपल के पास एक सेटटर है और इसे प्रोग्रामेटिक रूप से बदला जा सकता है। (यह प्रतिरूपण btw नहीं है।)

विंडोज़डिएंटी आपकी वर्तमान विंडोज पहचान है, यदि कोई हो। यह आवश्यक रूप से उपयोगकर्ता को प्रतिबिंबित नहीं करेगा, फॉर्म प्रमाणीकरण के साथ ASP.NET सोचें। फिर WindowsIdentity NT-service होगी, लेकिन FormsIdentity उपयोगकर्ता में लॉग इन होगा। पासपोर्ट इडेंटिटी भी है, और आप चीजों को जटिल बनाने के लिए अपनी खुद की चीजें बना सकते हैं।

HttpContext = HttpContext.Current.User है, जो एक IPrincipal उद्देश्य यह है कि वर्तमान वेब अनुरोध के लिए सुरक्षा में जानकारी शामिल है रिटर्न:

+0

क्या "प्रतिरूपण" का अर्थ है यदि आप "के रूप में चलाएं ..." के माध्यम से कुछ चलाते हैं? – Andy

+0

@ एंडी, मैंने कोशिश की है। लेकिन WindowsIdentity क्लास में एक प्रतिरूपण() विधि है, और मुझे पूरा यकीन है कि _it_ प्रतिरूपण करेगा। ;) – sisve

0

मेरा मानना ​​है कि संपत्ति कई जगहों पर रखी गई थी ताकि प्रोग्रामर के लिए यह आसान हो सके। उपयोगकर्ता में केवल एक लॉग है, और केवल एक ही संबंधित नाम है।

+0

तो निहितार्थ से, ये सभी विधियां अंतर-परिवर्तनीय हैं? – Andy

+0

मुझे विश्वास है हाँ। मैं यहां कोई सूक्ष्म मतभेद की उम्मीद नहीं करता। –

1

आपने वैकल्पिक तरीकों से पूछा।

बेशक, आप हमेशा मूल विंडोज एपीआई का उपयोग कर सकते हैं: GetUserName

0

तीन तरीकों का पालन वर्णित हैं। यह प्रमाणीकृत वेब क्लाइंट है।

विंडोजआईडेंटिटी = विंडोजआईडेंटिटी.गेटक्यूरेंट(), जो वर्तमान में निष्पादित Win32 थ्रेड के सुरक्षा संदर्भ की पहचान देता है।

थ्रेड = थ्रेड। वर्तमान प्रिंसिपल जो वर्तमान में निष्पादित .NET थ्रेड का प्रिंसिपल देता है जो Win32 थ्रेड के शीर्ष पर सवारी करता है।

और वे अपने IIS कॉन्फ़िगरेशन के आधार पर परिणाम में बदलने के रूप में इस लेख में विस्तार से बताया: http://msdn.microsoft.com/en-us/library/aa302377.aspx