'System.Web.Security.FormsIdentity' टाइप करने के लिए 'System.Security.Principal.GenericIdentity' प्रकार की ऑब्जेक्ट डालने में असमर्थ

I have get this error during the site log in.How can i resolve this problem.enter image description here

0

4 उत्तर

अपवाद आपको यहां जो कुछ भी जानने की आवश्यकता है, उसे बताता है, FormsIdentity को GenericIdentity पर नहीं डाला जा सकता क्योंकि वे 2 पूरी तरह से अलग वर्ग हैं।

आप वास्तव में क्यों के रूप में किसी भी तरह की जानकारी प्रदान नहीं करते हैं, हालांकि, उन दोनों प्रकारों के बीच सामान्य आधार वर्ग दावा Identity उदा।

var identity = (ClaimsIdentity)HttpContext.Current.User.Identity;
0
जोड़ा
@WiktorZychla जैसे मैंने अपने जवाब में कहा, ओपी इस बारे में कोई विवरण नहीं देता है कि उन्होंने पहली जगह क्यों डाली। यदि यह टिकट समर्थन के लिए है तो स्पष्ट रूप से एक बड़ी समस्या है क्योंकि GenericIdentity इसका समर्थन नहीं करता है। मेरा अनुमान है कि ओपी ने अपनी खुद की सुरक्षा लागू की है (गैर-फॉर्म आधारित)।
जोड़ा लेखक James, स्रोत
18 वीं पंक्ति में, अपवाद के नीचे एक पंक्ति, वह फॉर्म FormsIdentity की टिकट संपत्ति तक पहुंचता है। दावा Identity पर कास्ट करने से उन्हें उनकी सहायता नहीं होगी क्योंकि नीचे दिया गया कोड संकलित नहीं होगा। उसे शायद दावा Identity तक जाने के लिए पूरे दृष्टिकोण को फिर से डिजाइन करना होगा।
जोड़ा लेखक Wiktor Zychla, स्रोत
वह शायद नहीं है। वह सिर्फ फॉर्म कुकी के उपयोगकर्ता डेटा अनुभाग से भूमिकाएं निकालता है। एक आम दृष्टिकोण।
जोड़ा लेखक Wiktor Zychla, स्रोत

स्पष्ट रूप से वर्तमान अनुरोध से जुड़े मूल वस्तु <कोड> जेनेरिक इडेंटिटी की बजाय FormsIdentity थी। इन दोनों के बीच कास्टिंग संभव नहीं है।

पहचान प्रबंधन मॉड्यूल और आपके कोड के अन्य सभी संभावित स्थानों के संबंध में आपको अपने आवेदन के ढेर का ध्यानपूर्वक निरीक्षण करना चाहिए जहां पहचान वर्तमान अनुरोध के लिए निर्धारित है। यदि आप अपराधी की पहचान करने में सक्षम हैं जो GenericIdentity सेट करता है - आप कर चुके हैं, तो आप इस विशेष स्थान को फिर से लिख सकते हैं/फिर से डिजाइन कर सकते हैं।

मेरा अनुमान है कि यह समस्या तब होती है जब उपयोगकर्ता नहीं प्रमाणीकृत होता है। रनटाइम वर्तमान अनुरोध के लिए GenericIdentity बनाता है और IsAuthenticated को false पर सेट करता है। मैं कोड को फिर से लिखूंगा:

 if ( HttpContext.Current.User != null && HttpContext.Current.Identity is FormsIdentity )
 {
   //your code follows
 }
 else
 {
   //the user is not yet authenticated and 
   //there is no Forms Identity for current request
 }
0
जोड़ा
मैं बस पुराने एप्लिकेशन का समर्थन करने वाली इस समस्या में भाग गया, और पूरा समाधान नियंत्रक को [अधिकृत] टैग जोड़ना था। समस्या आई क्योंकि पृष्ठ उस कोड को चलाने का प्रयास कर रहा था जिसके लिए उपयोगकर्ता को लॉग इन होना आवश्यक था। इसलिए अब यह कोड चलाने की कोशिश करने से पहले लॉगिन पृष्ठ पर रीडायरेक्ट करता है।
जोड़ा लेखक PhillipXT, स्रोत

यह समस्या तब होती है जब उपयोगकर्ता प्रमाणीकृत नहीं होता है: या तो आपने अपने ब्राउज़र से कुकीज़ हटा दी हैं और फिर आप लॉगिन के बिना सीधे यूआरएल तक पहुंच रहे हैं।

0
जोड़ा

मैं इस समस्या में भाग गया क्योंकि मैं अपने वेब ऐप पर एंट्री पॉइंट पर [authorize] विशेषता का उपयोग करना भूल गया था जो फॉर्म प्रमाणीकरण का उपयोग कर रहा था। एंट्री पॉइंट ने User.Identity को GenericIdentity से FormsIdentity पर डालने का प्रयास किया और असफल रहा।

मेरे एएसपी.नेट एमवीसी नियंत्रक में मेरे पास निम्न कोड था;

public ActionResult Index(long? eventID)
{
    //error occurred here
     FormsIdentity id = (FormsIdentity)HttpContext.User.Identity;    
}

मेरे web.config में सेट प्रमाणीकरण विधि को लागू करने के लिए बदल दिया;


अद्यतन कोड;

[Authorize]
public ActionResult Index(long? eventID) { 

   FormsIdentity id = (FormsIdentity)HttpContext.User.Identity; 

}
0
जोड़ा
दरअसल, यहां अतिरिक्त स्पष्टीकरण जोड़ने से आपकी पोस्ट में सुधार होगा। लेकिन भविष्य के समीक्षक के लिए, यह एक जवाब है।
जोड़ा लेखक ryanyuyu, स्रोत