我只是ASP.NET MVC的新手,并且不确定如何以“正确的方式”完成某些任务。
本质上,我将登录的userId存储在HttpContext.User.Identity中,并编写了EnhancedAuthorizeAttribute
来执行一些自定义授权。
在覆盖的OnAuthorization
方法中,我的域模型访问数据库,以确保当前用户ID可以访问传入的routeValue“BatchCode”。原型(prototype)是:
ReviewGroup GetReviewGroupFromBatchCode(string batchCode);
如果用户无法访问ReviewGroup并且OnAuthorization然后拒绝访问,它将返回null。
现在,我知道修饰的操作方法仅在OnAuthorization通过时才会执行,但是我不想再次访问数据库以再次获得ReviewGroup。
我正在考虑将ReviewGroup存储在
HttpContext.Items["reviewGroup"]
中,现在从 Controller 访问它。这是可行的解决方案,还是我走错了路?
谢谢!
最佳答案
HttpContext.Items仅在请求期间有效。如果要保留更长的时间,则应将其放入
a) session -很好
b)个人资料-看不到优势
c)cookie-不推荐
d)每次都击中数据库-应该可以
将其存储在filterContext.RouteData.DataTokens中吗?
关于c# - ASP.NET MVC AuthorizeAttribute将值传递给操作方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2831389/