我只是ASP.NET MVC的新手,不确定如何以“正确的方式”完成某项任务。
实际上,我将登录的userId存储在HttpContext.User.Identity中,并编写了一个EnhancedAuthorizeAttribute来执行一些自定义授权。
在覆盖的OnAuthorization方法中,我的域模型访问数据库,以确保当前用户id可以访问传入的routeValue "BatchCode“。原型是:
ReviewGroup GetReviewGroupFromBatchCode(string batchCode);如果用户无法访问ReviewGroup,并且OnAuthorization拒绝访问,它将返回null。
现在,我知道修饰过的操作方法只有在OnAuthorization通过时才会执行,但我不想再次访问数据库来获取ReviewGroup。
我正在考虑将ReviewGroup存储在HttpContext.Items["reviewGroup"]中,并在此时从控制器访问它。
这是一个可行的解决方案,还是我走错了路?
谢谢!
发布于 2010-05-19 22:27:18
或者,避免命中数据库的最好也是最简单的方法之一是缓存。把它取回来,放到缓存里。如果再次需要它,它已经在内存中,不需要DB命中。如果没有,那么当缓存超出作用域时,对象也会超出作用域。
发布于 2010-05-14 10:56:59
除非您正在从ReviewGroup中执行一个非常大的select操作,或者您有一个庞大的数据库,否则第二次数据库命中不会是一个太大的问题。现代数据库在进行选择方面非常高效,特别是在索引正确的表中。
根据我的经验,这是进行授权的最佳方式,也是我在应用程序中授权特定操作的类似方法。
因此,简而言之,我一点也不担心第二次数据库命中。
https://stackoverflow.com/questions/2831389
复制相似问题