के कार्यों पर लागू होता है, मैं कस्टम प्रमाणीकरण तर्क करने के लिए एक ActionFilterAttribute का उपयोग कर रहा हूं। विशेषता केवल व्युत्पन्न नियंत्रक कक्षा पर उपयोग की जाएगी जिसमें मेरा प्रमाणीकरण तर्क शामिल है।एक्शनफिल्टरएट्रिब्यूट - एक विशिष्ट नियंत्रक प्रकार
यहाँ मेरी नियंत्रक, अपने कस्टम नियंत्रक वर्ग से ली गई है, और एक नमूना विशेषता:
public class MyController : CustomControllerBase
{
[CustomAuthorize(UserType = UserTypes.Admin)]
public ActionResult DoSomethingSecure()
{
return View();
}
}
यहाँ मेरी ActionFilterAttribute का एक उदाहरण है:
public class CustomAuthorizeAttribute : ActionFilterAttribute
{
public MyUserTypes UserType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
myUser user = ((CustomControllerBase)filterContext.Controller).User;
if(!user.isAuthenticated)
{
filterContext.RequestContext.HttpContext.Response.StatusCode = 401;
}
}
}
महान काम करता है।
यहां प्रश्न है: क्या मैं यह पूछ सकता हूं कि यह विशेषता केवल मेरे कस्टम नियंत्रक प्रकार में क्रियाओं पर उपयोग की जा सकती है?
आपकी विशेषता टूट गई है क्योंकि यह एथ्रोइज एट्रिब्यूट से प्राप्त नहीं होती है और इस प्रकार कार्रवाई को कैश किए जाने पर चलाने की गारंटी नहीं दी जाती है। कैशिंग के साथ काम करने वाले समाधानों के लिए http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ देखें। –
कार्रवाई परिणाम कैश क्यों किया जाएगा? –
इसे कैश किया जाएगा क्योंकि किसी ने इसे कैश करने के लिए कहा था। कल्पना करें कि कोई व्यक्ति उप-प्रकार पर टूटी हुई विशेषता को ध्यान में रखते हुए, अभिभावक वर्ग पर कैश विशेषता डालता है। एएसपी.NET/MVC कैशिंग के साथ मूल रूप से असंगत नहीं है जो एक विशेषता का उपयोग करना एक बेहतर विचार है। विकल्पों के लिए उपरोक्त लिंक देखें। –