2012-02-28 18 views
14

के लिए कस्टम एमवीसी प्राधिकरण एट्रिब्यूट मैं अपने वेब एपीआई नियंत्रकों पर एक कस्टम प्राधिकरण विशेषता को लागू करने की कोशिश कर रहा हूं, लेकिन एक अप्रत्याशित व्यवहार में आया।एएसपी.NET वेब एपीआई

 <Authorize(Users:="myUser")> 
    Public Function GetTodoItems() As IQueryable(Of TodoItem) 

ऊपर कोड बहुत अच्छी तरह से काम करता है: यह, बॉट किसी और की अनुमति दी है पहुँच "MyUser" आइटम को पुनः प्राप्त करने की अनुमति देगा। हालांकि, जब मैं अपने कस्टम प्राधिकरण के साथ एक ही दृष्टिकोण का प्रयास करता हूं, तो पूरी जांच छोड़ दी जाती है, और कोई भी उपयोगकर्ता संसाधन तक पहुंच सकता है। न तो AuthorizeCore और न ही OnAuthorization मेरी व्युत्पन्न कक्षा में ओवरराइड विधियों को बुलाया जाता है।

 <MyAuth(Users:="myUser")> 
    Public Function GetTodoItems() As IQueryable(Of TodoItem) 

व्युत्पन्न वर्ग System.Web.Mvc.AuthorizeAttribute से विरासत, और परियोजना आईआईएस पर तैनात किया जाता है, साथ विंडोज प्रमाणीकरण & प्रतिरूपण सक्षम, और बेनामी प्रमाणीकरण विकलांग।

यदि मैं एक एमवीसी नियंत्रक के लिए एक ही कस्टम प्रमाणीकरण जोड़ता हूं, तो यह काम करता है। लेकिन एपीआई नियंत्रकों पर, कुछ भी नहीं। यदि Authorize विशेषता या तो काम नहीं करती, तो यह अधिक समझ में आती। क्या मैं कुछ भूल रहा हूँ? क्या यह एक अपेक्षित व्यवहार है, या बीटा में एक बग है?

उत्तर

31

आप वेब एपीआई के बजाय System.Web.Mvc.AuthorizeAttribute के लिए System.Web.Http.dll से System.Web.Http.AuthorizeAttribute उपयोग करना चाहिए।

यही है, क्योंकि namespace System.Web.Http.AuthorizeAttributeAuthorizationFilterAttribute से ली गई है। फिल्टर को वेब एपीआई द्वारा स्वचालित रूप से संभाला जाता है। अपने स्वयं के कार्यान्वयन में मैंने बुनियादी HTTP प्रमाणीकरण को संभालने के लिए सीधे AuthorizationFilterAttribute से व्युत्पन्न किया।

+0

धन्यवाद, नामस्थान बदलना काम किया! यह अभी भी अजीब लगता है कि 'System.Web.Mvc.AuthorizeAttribute' का उपयोग वेब एपीआई के लिए किया गया था, जबकि मेरी कक्षा, जो उस सटीक कक्षा से ली गई थी, नहीं। –

+1

यह एमवीसी और वेब एपीआई के बीच कई प्रकार के डुप्लिकेट की तरह लगता है। शायद वे विलय हो जाएंगे और रिलीज में हमारे पास एक प्रकार का नमूना होगा। तो शायद 'AuthorizeAttibute' ऑब्जेक्ट्स में से किसी एक को आंतरिक रूप से चेक किया जा रहा है, बस अनुमान लगाया जा सकता है। –

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