我需要根据用户当前正在查看的页面而改变菜单结构。因此,我需要禁用某些节点的缓存,因为这些节点可能会针对每个请求进行更改。我该怎么做?
我尝试过以下方式设置DynamicNode
:
var dynamicNode = new DynamicNode()
{
Title = title,
Action = actionName,
Controller = controllerName,
RouteValues = routeValues,
Attributes = attributes,
ChangeFrequency = ChangeFrequency.Always,
LastModifiedDate = DateTime.Now,
UpdatePriority = UpdatePriority.Automatic,
};
但这似乎没有效果。
我还在 Web.config 文件中设置了cacheDuration="0"
,没有效果。
我还在DynamicNodeProvider的GetCacheDesctription中设置了以下内容
return new CacheDescription("GuideDynamicNodeProvider")
{
AbsoluteExpiration = DateTime.Now,
};
也没有效果。
我是否错误地使用了这些设置?关于这方面的文件相当缺乏。
答案 0 :(得分:1)
不支持禁用特定节点的缓存。但是,您可以通过将缓存持续时间设置为0
来禁用整个站点地图的缓存。
如果您要执行的操作是在数据更改时刷新节点,则可以在更新数据时使用SiteMapCacheReleaseAttribute
或致电SiteMaps.ReleaseSiteMap()
。
另一方面,如果数据库中的数据是从不受您控制的来源更新的,您可以自己实现ICacheDependency
来创建SqlCacheDependency
类,然后使用DI注入它。看看RuntimeFileCacheDependency
class,了解如何做到这一点。
请注意ChangeMonitor
放入列表的原因是它支持RuntimeCompositeCacheDependency
,这允许您为同一个缓存配置多个缓存依赖项。