asp.net-mvc – 如何在ASP.NET MVC中为经过身份验证的用户关闭输
发布时间:2020-12-15 23:39:36 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET MVC应用程序.我需要缓存一些页面,但只对非验证用户. 我试图使用VaryByCustom =“user”与以下GetVaryByCustomString实现: public override string GetVaryByCustomString(HttpContext context,string custom){ if (custom == "user") { if
我有一个ASP.NET MVC应用程序.我需要缓存一些页面,但只对非验证用户.
我试图使用VaryByCustom =“user”与以下GetVaryByCustomString实现: public override string GetVaryByCustomString(HttpContext context,string custom) { if (custom == "user") { if (context.User.Identity.IsAuthenticated) { return context.User.Identity.Name; } else { return ""; } } return base.GetVaryByCustomString(context,custom); } 然而,这并不是我所需要的,因为网页仍然被缓存.只有不同的是,现在是为每个用户单独缓存. 一个可能的解决方案是每当用户被认证时返回Guid.NewGuid(),但是对我来说看起来像是浪费大量资源. 那么你有什么技巧给我吗? 解决方法
所以这里是我做的:
public class NonAuthenticatedOnlyCacheAttribute : OutputCacheAttribute { public override void OnResultExecuting(ResultExecutingContext filterContext) { var httpContext = filterContext.HttpContext; if (httpContext.User.Identity.IsAuthenticated) { // it's crucial not to cache Authenticated content Location = OutputCacheLocation.None; } // this smells a little but it works httpContext.Response.Cache.AddValidationCallback(IgnoreAuthenticated,null); base.OnResultExecuting(filterContext); } // This method is called each time when cached page is going to be // served and ensures that cache is ignored for authenticated users. private void IgnoreAuthenticated(HttpContext context,object data,ref HttpValidationStatus validationStatus) { if (context.User.Identity.IsAuthenticated) validationStatus = HttpValidationStatus.IgnoreThisRequest; else validationStatus = HttpValidationStatus.Valid; } } 非常感谢Craig Stuntz谁指出我正确的方向,他的回答我不知不觉中被低估了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.Net MVC 3中的远程验证:如何在Action方
- asp.net-mvc – ASP.NET MVC性能
- 是否值得使用ASP.Net内置的配置文件系统?
- asp.net-mvc – 将ExtJs 4网格过滤器信息绑定到asp.net mvc
- Modular Web Application with ASP.NET Core
- asp.net-mvc – 如何建立“后退”链接?
- asp.net – 如何维护具有大量分支的SQL Server DB
- 回收ASP.NET应用程序是否会激起用户的兴趣?
- 我的asp.net应用程序需要“IIS元数据库和IIS 6配置兼容性”
- asp.net – 永远不想在highcharts上隐藏工具提示
推荐文章
站长推荐
- asp.net – 为什么在设置@Page masterPageFIle时
- asp.net-mvc-3 – Asp.net MVC3从razor View访问
- asp.net-mvc – AJAX POST到MVC Controller显示3
- asp.net-mvc-3 – 如何让IIS Express使用64位第三
- C# 之 DataReader 和 DataSet 的区别
- asp.net-mvc – 从Scripts.Render中排除的Asp.Ne
- asp.net – 如何在Web应用程序中使用ServiceStac
- Jquery 组合form元素为json格式,asp.net反序列化
- asp.net – On-Session-expire-event?
- ASP.NET VNext类库System.Runtime.Serialization
热点阅读