संकलक त्रुटि बहुत स्पष्ट है, जब एक विशेषता की घोषणा (क्योंकि अपने मूल्य संकलन समय पर पता होना चाहिए) आप किसी भी विधि कॉल नहीं कर सकते, लेकिन आप प्राप्त कर सकते हैं अपने स्वयं के कस्टम विशेषता, AuthorizeAttribute
से प्राप्त सभी प्रदर्शन करने के लिए आपको जरूरी तर्क क्या हम सभी ने NameAttribute
& फ़ैंसी लंबे समय से प्रतीक्षा किए गए स्थानीयकरण-जागरूक डेटा एनोटेशन से पहले दोस्तों को स्थानीयकृत करने के लिए क्या किया है? अवधारणा के
सबूत:
class DynamicAuthorizeAttribute : AuthorizeAttribute {
protected bool AuthorizeCore(HttpContextBase context) {
// Perform your logic here, eventually update Roles property
}
}
और फिर:
[DynamicAuthorize]
public ActionResult Get() {
// ...
}
यह सिर्फ एक संभव तरीका है, वहाँ आप अपने खुद के तर्क डाल या बस Roles
संपत्ति को अद्यतन करने और हमेशा की तरह प्रतिनिधि कर सकते हैं तर्क base.AuthorizeCore(context)
पर कॉल कर रहा है। ध्यान रखें कि यहां आपका सभी कोड थ्रेड-सुरक्षित होना चाहिए।
आप स्थिर तरीकों के साथ काम कर रहे हैं और आप अपने नियंत्रक के अंदर उस तर्क रखने के लिए तो आप (उदाहरण के लिए) स्वीकार करने के लिए चारों ओर खेल सकते हैं कुछ इस तरह हैं:
[DynamicAuthorize(typeof(MyView), nameof(GetRole))]
ध्यान दें कि आप नियंत्रक का उपयोग कर सकते और context.HttpContext.Request.RequestContext.RouteData
से नाम देखें।
फिर ऐसी स्थिर विधि का आह्वान करें। ध्यान दें कि यदि तर्क वास्तव में जटिल है और बहुत भिन्न होता है तो आप इस तर्क को केंद्रीकृत करना चाहते हैं और ऐसा करने के लिए अन्य एमवीसी उपकरण का उपयोग कर सकते हैं।
स्रोत
2016-04-14 11:59:43
आप नहीं कर सकते। केवल पैरामीटर मान जिन्हें संकलन-समय पर हल किया जा सकता है, स्वीकार किए जाते हैं। –
गुण कोड के रूप में संग्रहीत नहीं हैं, वे मेटाडेटा के रूप में संग्रहीत हैं - यही कारण है कि आप केवल उनके अंदर संरचनाओं की सीमित सीमा का उपयोग कर सकते हैं। –