自定义输出缓存提供程序未用于子操作缓存

本文关键字:缓存 用于 操作 输出 自定义 程序 | 更新日期: 2023-09-27 17:50:40

所以我有这个CustomOutputCacheProvider扩展了abstract class OutputCacheProver,因为我的网页可以用不同的语言查看。语言是服务器所知道的。我的意思是服务器知道当前UI的文化(例如"en-US")。所以我扩展OutputCacheProver的原因是让这种语言处理保持在服务器端,就像它一样。

基本上对于不同的语言,自定义提供程序存储不同的数据。但问题是,(一切都很好,但是这个,提供程序在web.config中注册)对于ChildActionOnly操作,此提供程序不使用。我的意思是,假设返回PartialView并具有ChildActionOnlyOutputCache属性的操作。我注册的提供程序没有缓存PartialView。或者我不知道,发生了别的事。对于我尝试过的其他任何东西,我的提供者都工作得很好。我想对于子动作缓存ASP。. NET MVC本身正在使用一些其他的提供者。总之,这里可以做什么呢?

自定义输出缓存提供程序未用于子操作缓存

我认为您最好的选择是重写GetVaryByCustomString并确保自定义字符串包含语言。然后,它应该可以从任何提供程序层/实现中找到。但是,可能只有在VaryByCustom有值时才会检查,这意味着调整[OutputCache(...)]以包含某些内容-例如[OutputCache(... VaryByCustom="language;...")]

注意,如果您已经有一个GetVaryByCustomString(用于VaryByCustom),除了所有其他关注之外,您的特定于语言的部分应该是

注意:使用这种方法,您首先不需要自定义输出缓存提供程序。