使用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