繁体   English   中英

ASP.NET MVC AuthorizeAttribute将值传递给ActionMethod?

[英]ASP.NET MVC AuthorizeAttribute passing values to ActionMethod?

我只是ASP.NET MVC的新手,我不确定如何以“正确的方式”完成某项任务。

本质上,我将登录的userId存储在HttpContext.User.Identity中,并编写了一个EnhancedAuthorizeAttribute来执行一些自定义授权。

在重写的OnAuthorization方法中,我的域模型命中数据库以确保当前用户标识可以访问传入的routeValue“BatchCode”。 原型是:

ReviewGroup GetReviewGroupFromBatchCode(string batchCode);

如果用户无法访问ReviewGroup,则它将返回null,然后OnAuthorization拒绝访问。

现在,我知道装饰动作方法只有在OnAuthorization通过时才会执行,但我不想再次访问数据库以再次获取ReviewGroup。

我正在考虑将ReviewGroup存储在HttpContext.Items["reviewGroup"]并且此时从控制器访问它。

这是一个可行的解决方案,还是我走错了路?

谢谢!

HttpContext.Items仅在请求期间有效。 如果你想坚持一段时间,你应该把它放进去

a)会议 - 很好

b)简介 - 没有看到优势

c)cookie - 不推荐

d)每次都打到数据库 - 应该没问题

将它存储在filterContext.RouteData.DataTokens中?

或者,避免命中数据库的最佳方法之一是缓存。 检索它,将其粘贴在缓存中。 如果它再次需要它已经在内存中并且不需要DB命中。 如果没有,那么当缓存超出范围时,对象也将如此。

除非你从ReviewGroup做一个非常大的选择,或者你有一个巨大的数据库,那么第二个数据库命中不会是一个太大的问题。 现代数据库在选择时非常有效,特别是使用正确索引的表。

根据我的经验,这是授权的最佳方式,也是我在应用程序中授权特定操作的类似方法。

所以简而言之,我根本不担心第二次数据库命中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM