2014-10-30 6 views
5
[AuthenticateUser] 
public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [AllowAnonymous] 
    public ActionResult List() 
    { 
     return View(); 
    } 
} 

सूची के रूप में नामित कार्रवाई के लिए प्रमाणीकरण को कैसे हटाया जाए? कृपया सलाह दें ....क्या एमवीसी 5 नियंत्रक में एक क्रिया पर प्रमाणीकरण फ़िल्टर को अक्षम करना संभव है?

मेरा कस्टम फ़िल्टर कोडिंग जैसा है .. मुझे फ़िल्टर एट्रिब्यूट कॉल भी मिला है। 'MVC5Features.Filters.AuthenticateUserAttribute.IsAnonymousAction (System.Web.Mvc.AuthorizationContext)' त्रुटि 1 के लिए सबसे अच्छा अतिभारित विधि मैच में कुछ अमान्य तर्क सी है:

public class AuthenticateUserAttribute: FilterAttribute, IAuthenticationFilter 
{ 
    public void OnAuthentication(AuthenticationContext context) 
    { 
     if (this.IsAnonymousAction(context)) 
     { 

     } 

     if (user == "user") 
     { 
      // do nothing 
     } 
     else 
     { 
      context.Result = new HttpUnauthorizedResult(); // mark unauthorized 
     } 
    } 

    public void OnAuthenticationChallenge(AuthenticationChallengeContext context) 
    { 
     if (context.Result == null || context.Result is HttpUnauthorizedResult) 
     { 
      context.Result = new RedirectToRouteResult("Default", 
       new System.Web.Routing.RouteValueDictionary{ 
        {"controller", "Home"}, 
        {"action", "List"}, 
        {"returnUrl", context.HttpContext.Request.RawUrl} 
       }); 
     } 
    } 
} 

नीचे कोड त्रुटि संदेश उत्पन्न के बारे में बताएं : \ users \ kirupananthan.g \ दस्तावेज़ \ दृश्य स्टूडियो 2013 \ प्रोजेक्ट्स \ MVC5 विशेषताएं \ MVC5 विशेषताएं \ फ़िल्टर \ AuthenticateUserAttribute.cs 16 17 एमवीसी 5 विशेषताएं त्रुटि 2 तर्क 1: 'System.Web.Mvc.Filters.AuthenticationContext' से कनवर्ट नहीं किया जा सकता है ' System.Web.Mvc.AuthorizationContext 'c: \ users \ kirupananthan.g \ दस्तावेज़ \ दृश्य स्टूडियो 2013 \ प्रोजेक्ट्स \ MVC5 विशेषताएं \ MVC5 विशेषताएं \ फ़िल्टर \ AuthenticateUserAttribute.cs 16 40 एमवीसी 5 विशेषताएं

if (this.IsAnonymousAction(context)) 
+0

क्या यह आपकी कस्टम विशेषता है। यदि नहीं, तो शायद '[AllowyAnonymous]' काम करेगा। –

+0

एमवीसी 5 में प्रमाणीकरण फ़िल्टर पेश किया गया .. कोई अंतर्निहित प्रमाणीकरण फ़िल्टर नहीं है .. यह मेरा कस्टम प्रमाणीकरण फ़िल्टर है ... –

+0

जहां इम्प्ला है। 'IsAnonymousAction' का? अगर शरीर में 'रिटर्न' होना चाहिए तो इसमें और क्या होगा। –

उत्तर

9

का प्रयास करें, तो आप AllowAnonymous को संभालने के लिए यह विस्तार कर सकते हैं (आप AllowAnonymous का उपयोग नहीं करना चाहते हैं, yoy खुद उदा बना सकते हैं NoAuthentication):

public class AuthenticateUser : IAuthenticationFilter 
{ 

    public void OnAuthentication(AuthenticationContext filterContext) 
    { 
     if (this.IsAnonymousAction(filterContext)) 
     { 
      return; 
     } 

     // some code 
    } 

    private bool IsAnonymousAction(AuthenticationContext filterContext) 
    { 
     return filterContext.ActionDescriptor 
          .GetCustomAttributes(inherit: true) 
          .OfType<AllowAnonymousAttribute>() 
              //or any attr. you want 
          .Any(); 
    } 
} 
+0

के लिए है मैंने आपके उदाहरण की कोशिश की है .. लेकिन यह उपर्युक्त त्रुटि दिखाता है ... मुझे अपने प्रश्न को संपादित करके त्रुटि शामिल थी ... कृपया सलाह दें –

+0

प्रश्न में मेरी टिप्पणी देखें। –

+0

आपका उत्तर सही है। मैंने आपका अपना काम कॉपी किया है और इसे मेरे कोड में पेस्ट किया है। इसलिए, आपने उस पैरामीटर में अपना उत्तर "प्रमाणीकरण कॉन्टेक्स्ट" को "प्रमाणीकरण कॉन्टेक्स्ट" में संपादित किया है। कृपया –

1

चूंकि यह अपने कस्टम फिल्टर है

[AllowAnonymous] 

विशेषता

+1

[AllowAnonymous] प्रमाणीकरण फ़िल्टर अक्षम करने के लिए काम नहीं कर रहा है ... यह प्राधिकरण फ़िल्टर –

0

हो सकता है कि अगर आपको लगता है कि कार्रवाई के लिए और अपने कस्टम प्रमाणीकरण फिल्टर में सब कुछ के लिए इस समूह की अनुमति देने के लिए एक विशेष उपयोगकर्ता समूह निर्दिष्ट करें।

0

MVC 5 और मैं बोली http://www.dotnetcurry.com/showarticle.aspx?ID=975 से वर्ग CustomOverrideAuthorizationAttribute FilterAttribute वर्ग से विरासत में मिली और IOverrideFilter लागू करता है। इस इंटरफ़ेस का उपयोग नियंत्रक पर लागू फ़िल्टर को परिभाषित करने के लिए किया जाता है। संपत्ति फ़िल्टर्स टॉवरराइड IAuthorizationFilter प्रकार देता है। इसका मतलब है कि अभिभावक (नियंत्रक या ग्लोबल एप्लिकेशन क्लास) पर लागू प्राधिकरण फ़िल्टर ओवरराइड किया जाएगा

0

मुझे विश्वास है कि आपको नियंत्रक से विशेषता को हटा देना चाहिए और इसे सूची के अलावा प्रत्येक क्रिया विधि पर रखना चाहिए।

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