我只是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/

10-10 18:45