C# 自定义输出缓存提供程序未用于子操作缓存
因此,我有一个C# 自定义输出缓存提供程序未用于子操作缓存,c#,asp.net-mvc,caching,C#,Asp.net Mvc,Caching,因此,我有一个CustomOutputCacheProvider,它扩展了抽象类OutputCacheProvider,因为我的网页可以用不同的语言查看。服务器知道语言。我的意思是服务器知道UI的当前文化(例如“en-US”)。因此,我扩展OutputCacheProver的原因是让这种语言处理保持在服务器端 基本上,对于不同的语言,自定义提供程序存储不同的数据。但问题是,(除了这个,一切都很好,提供程序在web.config中注册)对于ChildActionOnly操作,不使用该提供程序。我的
CustomOutputCacheProvider
,它扩展了抽象类OutputCacheProvider
,因为我的网页可以用不同的语言查看。服务器知道语言。我的意思是服务器知道UI的当前文化(例如“en-US”)。因此,我扩展OutputCacheProver
的原因是让这种语言处理保持在服务器端
基本上,对于不同的语言,自定义提供程序存储不同的数据。但问题是,(除了这个,一切都很好,提供程序在web.config中注册)对于ChildActionOnly
操作,不使用该提供程序。我的意思是,假设返回一个PartialView
的操作,并且其上有一个ChildActionOnly
和OutputCache
属性。
PartialView
未被我注册的提供程序缓存。或者我不知道,还有别的事情发生了。对于我尝试过的其他任何东西,我的提供商都工作得很好。我想,对于子操作缓存,ASP.NET MVC正在使用其他提供程序本身。无论如何,在这里可以做什么?我想最好的办法是重写GetVaryByCustomString
,并确保自定义字符串包含该语言。然后它应该可以从任何提供者层/实现中找到。但是,这可能只是在VaryByCustom
有值时才检查,这意味着调整[OutputCache(…)]
以包含某些内容-例如[OutputCache(…VaryByCustom=“language;”]
请注意,如果您已经有一个GetVaryByCustomString
(用于VaryByCustom
),您的语言特定部分应该是所有其他问题之外的一部分
注意:使用这种方法,您一开始就不需要自定义输出缓存提供程序。我想就是这样。你能举一个小例子说明怎么做吗?