asp.net-mvc-3 – mvc3 OutputCache RemoveOutputCacheItem Rend
我做了我的研究,但没有找到任何答案.
我在主页面中使用Html.RenderAction(用于呈现具有特定于用户权限的链接的页眉). Action使用OutputCache修饰,返回部分控制并按预期缓存. 当事件发生时(假设权限已更改)我想以编程方式使缓存的部分控件无效. 我正在尝试使用RemoveOutputCacheItem方法.它将路径作为参数.我正在尝试设置Html.RenderAction中使用的操作的路径.这不会使行动失效. 如何以编程方式使操作无效? 谢谢 解决方法
子操作的缓存存储在
OutputCacheAttribute.ChildActionCache属性中.问题是,为子操作生成id并将其存储在此对象中的API不公开(为什么是微软?).因此,如果您尝试遍历此集合中的对象,您将发现它还将包含子操作的缓存值,但除非您反向设计用于生成键的算法,否则您将无法识别它像这样的东西(如Reflector所示):
internal string GetChildActionUniqueId(ActionExecutingContext filterContext) { StringBuilder builder = new StringBuilder(); builder.Append("_MvcChildActionCache_"); builder.Append(filterContext.ActionDescriptor.UniqueId); builder.Append(DescriptorUtil.CreateUniqueId(new object[] { this.VaryByCustom })); if (!string.IsNullOrEmpty(this.VaryByCustom)) { string varyByCustomString = filterContext.HttpContext.ApplicationInstance.GetVaryByCustomString(HttpContext.Current,this.VaryByCustom); builder.Append(varyByCustomString); } builder.Append(GetUniqueIdFromActionParameters(filterContext,SplitVaryByParam(this.VaryByParam))); using (SHA256 sha = SHA256.Create()) { return Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(builder.ToString()))); } } 所以你可以执行以下疯狂: public ActionResult Invalidate() { OutputCacheAttribute.ChildActionCache = new MemoryCache("NewDefault"); return View(); } 这显然会使所有缓存的子操作无效,这些操作可能不是您正在寻找的但我担心除了当然是对密钥生成进行逆向工程之外的唯一方法:-). @Microsoft,拜托,我求你了解ASP.NET MVC 4.0: >除了甜甜圈洞缓存之外,还介绍了进行甜甜圈缓存的可能性>介绍了轻松过期缓存控制器操作结果的可能性(比Response.RemoveOutputCacheItem更多MVCish)>介绍轻松过期缓存子操作的结果的可能性>如果你这样做1.那么显然有可能使缓存的甜甜圈部分到期. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何构建,分区和构建大型MVC应用程序以便在
- ASP.NET自定义控件 – 什么是最好的方式来包括嵌入式CSS引用
- asp.net-mvc-4 – ASP.NET Active Directory搜索
- asp.net-mvc – 需要为ASP.NET mvc部署哪些文件?
- asp.net-mvc – 如何获得html.ActionLink结果文本的href部分
- .net – 使用DataAnnotations 4.0
- asp.net – 在回发上设置viewstate
- asp.net-mvc – 如何在asp.net mvc中使用SOAP
- asp.net-mvc-3 – 使用Jquery Ajax渲染部分视图与变量数据
- asp.net-mvc – 如何在ASP.NET MVC视图中对HTML列表项进行分
- entity-framework – 导航属性过滤器
- odata – 与Breezejs发布批量请求
- asp.net-mvc – ASP.NET MVC应用程序架构“指南”
- Asp.Net Core 2.0 多角色权限认证
- ASP.NET中TextBox使用Ajax控件显示日期不全的问题
- asp.net-mvc – 模型单元测试能否真正独立,如何[
- asp.net – 可以将值或参数传递到用户控件?
- asp.net-mvc – ASP.NET MVC:下载excel文件
- asp.net-mvc – 控制器的实例上的HttpContext在A
- asp.net-mvc-4 – EF5.x中对PadLeft缺乏支持的任