所以我有CustomOutputCacheProvider
扩展了abstract class OutputCacheProver
,因为我的网页可以用不同的语言查看。语言是服务器已知的。我的意思是服务器知道UI的当前文化(例如“en-US”)。所以我扩展OutputCacheProver
的原因是让这种语言处理在服务器端保持原样。
自定义提供程序基本上针对不同的语言存储不同的数据。但问题是,(一切都没关系,但这个,提供程序在web.config中注册),ChildActionOnly
操作不使用此提供程序。我的意思是,假设返回PartialView
并且在其上具有ChildActionOnly
和OutputCache
属性的操作。
我注册的提供程序未缓存PartialView
。或者我不知道,还有其他事情正在发生。对于我尝试过的任何其他事情,我的供应商都在努力工作。我想对于Child动作缓存ASP.NET MVC正在使用其他一些提供者本身。无论如何,在这里可以做些什么?
答案 0 :(得分:2)
我怀疑您最好的选择是覆盖GetVaryByCustomString
并确保自定义字符串包含语言。然后它应该从任何提供者层/实现找到工作。但是,可能只有在VaryByCustom
有值时才会检查,这意味着调整[OutputCache(...)]
以包含某些内容 - 例如[OutputCache(... VaryByCustom="language;...")]
请注意,如果您已经拥有GetVaryByCustomString
(与VaryByCustom
一起使用),则除了所有其他问题之外,您的语言特定部分应该是。
注意:使用这种方法,您首先不需要自定义输出缓存提供程序。