使用ASP.NET MVC我正在创建一个自定义Authorize属性来处理一些自定义授权逻辑。我已经看了很多例子,这很简单,但我的问题是哪种方法最好覆盖,AuthorizeCore或OnAuthorization?我见过许多覆盖其中一个的例子。有区别吗?
答案 0 :(得分:76)
线索在返回类型中:
AuthorizeCore
返回一个布尔值 - 它是决策代码。这应该仅限于查看用户的身份并测试他们所处的角色等。基本上它应该回答这个问题:
Do I want this user to proceed?
它不应该“执行”任何其他活动。
OnAuthorize
返回void - 这是您放置此时需要发生的任何功能的地方。例如写入日志,在会话中存储一些数据等。
答案 1 :(得分:16)
您应该放置必须运行的任何代码,无论用户是第一次获得授权,还是在AuthorizeCore
中使用缓存授权。
如果您查看源代码,可以看到AuthorizeCore
和OnAuthorize
都会调用OnCacheAuthorization
。这允许缓存授权但仍允许某些操作并做出有关授权的实际决策。
如果您需要AuthorizationContext中的某些内容,那么您可以创建一个属性来保存信息,然后在AuthorizeCore方法中访问该信息。