Asp.net mvc MVC甜甜圈缓存在联机部署后无法按预期工作
我们正在使用MVC甜甜圈缓存,整天都在尝试调试这个问题,但我仍然没有找到解决方案 我们选择开始在OutputCache上使用DonutOutputCache属性,通过日志记录,我们注意到某些具有DonutOutputCache属性的局部视图操作没有按照缓存参数进行缓存 我们有一个包含以下嵌套局部视图的视图(索引)。具有指定的圆环缓存属性的文件列在方括号中Asp.net mvc MVC甜甜圈缓存在联机部署后无法按预期工作,asp.net-mvc,asp.net-mvc-4,caching,donut-caching,Asp.net Mvc,Asp.net Mvc 4,Caching,Donut Caching,我们正在使用MVC甜甜圈缓存,整天都在尝试调试这个问题,但我仍然没有找到解决方案 我们选择开始在OutputCache上使用DonutOutputCache属性,通过日志记录,我们注意到某些具有DonutOutputCache属性的局部视图操作没有按照缓存参数进行缓存 我们有一个包含以下嵌套局部视图的视图(索引)。具有指定的圆环缓存属性的文件列在方括号中 _LayoutMainBase.cshtml _标题(局部视图) _车头底部行程(局部视图) _HeaderMainMenu(Pari
- _LayoutMainBase.cshtml
- _标题(局部视图)
- _车头底部行程(局部视图)
- _HeaderMainMenu(ParialView)
[DonutOutputCache(持续时间=3600)]
- _HeaderMainMenu(ParialView)
- _车头底部行程(局部视图)
- RenderBody()(HomeController.Index)
[DonutOutputCache(Duration=3600)]
- _标题(局部视图)
- 如果我们恢复到OutputCache属性
- 在我们的工作站上进行本地测试时
谢谢你的帮助 在下载并检查了项目的源代码之后,我们终于找到了发生这种情况的原因 此项目中定义的DonutOutputCache属性使用IKeyBuilder生成用于在中存储输出HTML的缓存键。项目附带的默认DevTrends.MvcDonutCaching.KeyBuilder类生成一个密钥,该密钥由以下部分组成:
- 前缀
- 控制器名称
- 动作名称
- Querystring参数值(取决于
是否启用了CacheSettings.Options
标志)OutputCacheOptions.IgnoreQueryString
- 表单参数(取决于
是否启用了CacheSettings.Options
标志)OutputCacheOptions.IgnoreFormData
- 路线值
- 如果将
属性设置为:VaryByParam
,则清除所有查询字符串/表单/路由值none
如果你把它设置成除了<代码> */COD>之外的任何东西,那么它只会考虑这些参数仅
VaryByCustom
参数将在System.Web.HttpApplication
中调用相同的GetVaryByCustomString
密钥生成器我们的解决方案是创建我们自己的自定义
IKeyBuilder
,它被传递,而不是默认的IKeyBuilder
,并解决了这个问题。下载并检查项目的源代码后,我们终于找到了发生这种情况的原因
此项目中定义的DonutOutputCache属性使用IKeyBuilder生成用于在中存储输出HTML的缓存键。项目附带的默认DevTrends.MvcDonutCaching.KeyBuilder类生成一个密钥,该密钥由以下部分组成:
- 前缀
- 控制器名称
- 动作名称
- Querystring参数值(取决于
是否启用了CacheSettings.Options
标志)OutputCacheOptions.IgnoreQueryString
- 表单参数(取决于
是否启用了CacheSettings.Options
标志)OutputCacheOptions.IgnoreFormData
- 路线值
- 如果将
属性设置为:VaryByParam
,则清除所有查询字符串/表单/路由值none
如果你把它设置成除了<代码> */COD>之外的任何东西,那么它只会考虑这些参数仅
VaryByCustom
参数将在System.Web.HttpApplication
中调用相同的GetVaryByCustomString
密钥生成器IKeyBuilder
,它被传递,而不是默认的IKeyBuilder
,并解决了这个问题