使用ASP.NET MVC我正在創建一個自定義的Authorize屬性來照顧一些自定義的授權邏輯。我看了很多例子,它非常簡單,但我的問題是哪個方法最好覆蓋AuthorizeCore或OnAuthorization?我看到很多例子都凌駕於其中。有區別嗎?擴展AuthorizeAttribute覆蓋AuthorizeCore或OnAuthorization
回答
的線索是在返回類型:
AuthorizeCore
返回一個布爾值 - 這是決策代碼。這應該是僅限於查看用戶的身份,並測試他們在等,等,這些角色基本上應該回答的問題:
Do I want this user to proceed?
它不應該執行「就在身邊」的任何其他活動。
OnAuthorize
返回void - 這是您在此處需要發生的任何功能的位置。例如寫入日誌,在會話中存儲一些數據等。
無論用戶是第一次被授權還是在AuthorizeCore
中使用緩存授權,您都應該放置任何必須運行的代碼。
如果你看看源代碼,你可以看到AuthorizeCore
被OnAuthorize
和OnCacheAuthorization
所調用。這允許授權被緩存,但仍然允許某些操作並做出有關授權的實際決策。
如果您需要AuthorizationContext中的某些內容,則可以創建一個屬性來保存信息,然後在AuthorizeCore方法中訪問該屬性。
我希望我可以突出顯示答案的最後一句。你真的應該大膽。在接受的答案中提到@ gw0的評論時,真正不幸的是,對錯誤原因使用錯誤覆蓋的建議已被投票。 –
AuthorizeAttribute(MSDN)的文檔清楚地指出(在線程安全下) _「任何實例成員不保證是線程安全的。」因此,我認爲持有屬性中的信息不是一種選擇。 – bvgheluwe
@BartVG - 我不知道我跟着。線程安全與這個討論有什麼關係?所有這些文本的含義是,如果將以多線程方式使用對象,則必須同步對象的訪問權限。 –
- 1. 從AuthorizeAttribute覆蓋AuthorizeCore未被調用
- 2. 在控件擴展中,覆蓋或addHandler?
- 3. 覆蓋或擴展jquery函數
- 4. 擴展,修改或覆蓋Joomla的bootstrap.php?
- 5. 覆蓋MVC中的AuthorizeAttribute 4
- 6. Typoscript:覆蓋擴展的Typoscript
- 7. Playframework擴展/覆蓋點
- 8. 覆蓋和擴展原型
- 9. PHP FileInfo擴展php.ini覆蓋
- 10. 擴展SKAction以覆蓋timingMode
- 11. 從擴展Flexform覆蓋TCEFORM
- 12. 如何擴展/覆蓋UserManager
- 13. 覆蓋無需擴展類
- 14. (覆蓋||擴展)JavaScript方法
- 15. 覆蓋擴展方法C#
- 16. Chrome擴展覆蓋css
- 17. 覆蓋擴展方法
- 18. 覆蓋擴展文件(Android)
- 19. Opera擴展中的覆蓋
- 20. 如何擴展ASP.NET MVC AuthorizeAttribute
- 21. 防止ExpanderView擴大點擊或覆蓋擴展方法
- 22. MVC 4覆蓋AuthorizeAttribute不工作
- 23. 覆蓋或覆蓋
- 24. 覆蓋鉻擴展中的JavaScript警報
- 25. 覆蓋Chrome擴展程序頁面CSS
- 26. 覆蓋拖放外殼擴展
- 27. 擴展,而不是覆蓋,原型
- 28. 覆蓋現有的Eclipse插件擴展
- 29. 如何擴展/覆蓋symfony2 form_row函數
- 30. 擴展器覆蓋Silverlight中的控件
結帳在MVC4,http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/e0115a823029#src%2fSystem.Web.Mvc%2fAuthorizeAttribute.cs – user1736525