2016-04-05 3 views
10

एक .NET कोर कंसोल एप्लिकेशन (नोट: एएसपी.नेट कोर नहीं!) में, मैं वर्तमान उपयोगकर्ता कैसे प्राप्त कर सकता हूं? स्पष्ट होने के लिए, मैं देख रहा हूं कि थ्रेड के रूप में क्या उपलब्ध होना चाहिए। वर्तमान प्रिंसिपल, जो अब मौजूद नहीं है। प्लेटफ़ॉर्म सेवा में यह जानकारी नहीं है, और न ही पर्यावरण करता है।.NET कोर कंसोल में वर्तमान उपयोगकर्ता प्राप्त करना

उत्तर

14

समझ गया। एक संभावित विकल्प WindowsIdentity उपयोग करने के लिए है:

WindowsIdentity.GetCurrent().Name 

यह System.Security.Principal.Windows पैकेज जोड़ने के लिए आवश्यक है। बेशक, यह केवल विंडोज़ के लिए है।

एक अन्य विकल्प के दावों का उपयोग करना है:

ClaimsPrincipal.Current 

कि के लिए, जोड़ने के लिए पैकेज System.Security.Claims है। विंडोज़ में, डिफ़ॉल्ट रूप से, पहचान खाली हो जाएगी।

+0

मैं लाइनों के बीच क्या सुनता हूं: दावा प्रिंसिपल भविष्य है;) – Thomas

+0

'दावा प्रिंसिपल। वर्तमान * * नियंत्रक में काम नहीं करेगा, यह शून्य होगा। आपको 'HttpContext.User' संपत्ति तक पहुंचने की आवश्यकता है, जो वास्तव में' दावा प्रिंसिपल 'उदाहरण होगा। –

+0

जानना अच्छा है। दावों के लिए एक स्थिर एपीआई आईएमएचओ के बावजूद इतना समझ नहीं लेता है। – Thomas

4

System.Security.Principal.Windows तब तक उपलब्ध नहीं है जब तक आप मैन्युअल रूप से DLL आयात नहीं करते। मेरे लिए काम किया है:

Environment.UserName; 

.NET Core System.Environment Source Code के अनुसार, इस समाधान "मामलों के 99% में पर्याप्त होना चाहिए।"

नोट: सुनिश्चित करें कि आप DotNetCore 2.0 या बाद में 1.0 और 1.1 को इस परिभाषा को लक्षित नहीं कर रहे हैं।

+0

मुझे 'पर्यावरण ' –

+0

में 'UserName' प्रतीत नहीं होता है, सुनिश्चित करें कि आप' DotNetCore 2.0' या बाद में लक्ष्यीकरण कर रहे हैं। 'DotNetCore 1.0' और' DotNetCore 1.1' में 'उपयोगकर्ता नाम' दिखाई नहीं देता है। –

0

आप IIdentity अमूर्त का पुन: उपयोग करने के लिए अपने बीच की परत के माध्यम से पारित करना चाहते हैं ऐसा करते हैं:

var identity = new GenericIdentity(Environment.UserDomainName + "\\" + Environment.UserName, "Anonymous"); 

पी.एस. कोर 2 कंसोल अनुप्रयोग में: ClaimsPrincipal.Current और Thread.CurrentPrincipal हमेशा अशक्त हैं (जब तक आप सेटअप उन्हें) और इस कोड को या तो काम नहीं करेगा:

IPrincipal principal = new GenericPrincipal(identity, null); 
AppDomain.CurrentDomain.SetThreadPrincipal(principal); 
इस के बाद

ClaimsPrincipal.Current और Thread.CurrentPrincipal अभी भी रिक्त हैं।

WindowsIdentity.GetCurrent() काम करता है, लेकिन System.Security.Principal.Window को संदर्भित करने के लिए और अधिक मजबूत कारण होने चाहिए तो "उपयोगकर्ता नाम" प्राप्त करें।

संबंधित मुद्दे