2011-07-22 21 views
10

मैं एक एमवीसी 3 इंट्रानेट एप्लिकेशन (विंडोज प्रमाणीकरण) पर काम कर रहा हूं। उपयोगकर्ता लॉग इन करने के बाद एप्लिकेशन को उपयोगकर्ता का प्रोफाइल पेज प्रदर्शित करना होगा। ऐसा करने के लिए कि लॉग इन उपयोगकर्ता का उपयोगकर्ता नाम Global.asax.cs में निम्न रूट में रूट पैरामीटर के रूप में पारित किया जाना चाहिए।ASP.NET MVC3 इंट्रानेट एप्लिकेशन में उपयोगकर्ता नाम लॉग इन करना

routes.MapRoute(
    "Initial", 
    "{controller}/{action}/{emailAlias}", // URL with parameters 
    new { controller = "Home", action = "Home", userId = **<USERNAME>**} 
); 

यहां, मैंने कुछ विकल्पों का उपयोग किया है।

  1. पहले मैंने Environment.Username का उपयोग किया था। जो विकास में अच्छी तरह से काम करता है। लेकिन प्रकाशन के बाद नहीं। क्योंकि Environment.Username एप्लिकेशन पूल का नाम उत्पन्न करता है जिसमें ऐप चलता है। जैसा कि here वर्णित है।

  2. Controller.User.Identity.Name का उपयोग नियंत्रकों में वांछित उपयोगकर्ता नाम प्राप्त करने के लिए किया जाता है, पूर्व और पोस्ट प्रकाशन में अच्छी तरह से काम करता है। लेकिन इसका उपयोग Global.asax.cs के संदर्भ में नहीं किया जा सकता है।

  3. System.Web.HttpContext.Current.User.Identity.Name शून्य संदर्भ प्रदान करता है।

  4. System.Security.Principal.WindowsIdentity.GetCurrent().Name तरह Environment.Username

के रूप में की एक ही काम करता है मुझे यकीन है कि यह अब तक कि मैं एक noob हूँ यह पता लगाने की आसान है हूँ। शायद मैं कुछ स्पष्ट याद किया है। यदि ऐसा है तो कृपया इसे इंगित करें या कृपया मुझे एक सरल समाधान के बारे में बताएं धन्यवाद।

+0

तो जब मैं उपयोगकर्ता को अपने सहकर्मी के उपयोगकर्ता नाम में बदलता हूं तो उसकी प्रोफ़ाइल दिखाई देगी? मार्ग के बजाय नियंत्रक को इंगित करने के लिए – jao

उत्तर

13

वैश्विक.एक्सएक्स कोड एप्लिकेशन स्टार्टअप (और शट डाउन) पर चलाया जाना चाहिए और उस समय आपके पास कोई सत्र या उपयोगकर्ता नहीं है (इसलिए नाम वैश्विक)। आपको रूट में उपयोगकर्ता नाम की आवश्यकता क्यों है? आपको पैरामीटर के रूप में प्राप्त करने के बजाय उपयोगकर्ता की पहचान करने के लिए नियंत्रकों के कोड में User.Identity.Name का उपयोग करना चाहिए।

+0

+1 – jao

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