ASP.NET MVC3,如何对不同的用户角色使用不同的OutputCacheProfile?
我知道我可以在 web.config 文件中设置 OutputCacheProfiles。
我想知道如何在页面(控制器)级别将不同的缓存配置文件应用到不同的用户角色?
I know I can setup OutputCacheProfiles at web.config file.
I like to know how to apply different cache profile to different user role on page (controller) level?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 OutputCache 属性来装饰控制器,该属性允许将参数作为参数传递。例如;
您没有理由无法扩展该属性以采用进一步的参数“RoleName”并执行“Roles.IsUserInRole(RoleName)”并根据每个角色加载不同的设置。
编辑
经过作者的评论,我审查了我的解决方案。
首先,您可以在 Web.config 中定义缓存配置文件;
我已经扩展了 OutputCacheAttribute 来考虑用户的授权,如果用户进行了身份验证,它就会加载 CacheProfile;
为了完整起见,这里是 Index.cshtml 文件;
注意:您必须确保为每个角色定义一个缓存配置文件,以及未找到角色时的默认配置文件。
编辑
作者希望知道如何在控制器内设置缓存配置文件,我已经发布了一个可行的解决方案,但我不喜欢它,因为使用了 HttpContext.Items - 所以是否有人可以建议替代方案?
首先,必须将OnActionExecuting更改为OnActionExecuted;
以下行允许您在控制器内设置配置文件;
如果我可以提供进一步的帮助,请告诉我,
马特
You can decorate a controller with the OutputCache attribute which allows arguments to be passed as parameters. For example;
There is no reason why you couldn't extend the attribute to take a further argument "RoleName" and perform a "Roles.IsUserInRole(RoleName)" and load different settings based upon each role.
EDIT
After comments from the author, I have reviewed my solution.
Firstly, you can define you cache profiles within the Web.config;
I have extended the OutputCacheAttribute to account for authorisation of a user, and if the user authenticates, it loads that CacheProfile;
Here is the Index.cshtml file for completeness;
Note: You will have to make sure to define a cacheprofile for each of your roles, aswell as a default for when no role is found.
EDIT
The author wished to know how to set the cache profile within the controller, I have posted a viable solution, but I don't like it because of the use of HttpContext.Items - so if anyone can suggest alternatives?
Firstly, you must change the OnActionExecuting to OnActionExecuted;
The following line allows you to set the profile within the controller;
Let me know if I can be of further assistance,
Matt