2

我需要有一个菜单结构,该结构根据用户当前正在查看的页面而变化。因此,我需要禁用某些节点的缓存,因为这些可能会因每个请求而改变。我该怎么做呢?

我尝试通过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.configcacheDuration="0"文件中设置过,没有效果。

我还在 DynamicNodeProvider 的 GetCacheDesctription 中设置了以下内容

return new CacheDescription("GuideDynamicNodeProvider")
{
    AbsoluteExpiration = DateTime.Now,
};

也没有效果。

我是否错误地使用了这些设置?这方面的文档相当缺乏。

4

1 回答 1

1

不支持禁用特定节点的缓存。但是,您可以通过将缓存持续时间设置为 来禁用整个站点地图的缓存0

如果您尝试在数据更改时刷新节点,则可以在数据更新时使用SiteMapCacheReleaseAttributeor 调用SiteMaps.ReleaseSiteMap()

另一方面,如果数据库中的数据从不受您控制的源更新,您可以ICacheDependency自己实现以创建一个SqlCacheDependency类,然后使用 DI 注入它。看看RuntimeFileCacheDependency课程,看看如何做到这一点。

请注意,ChangeMonitor将 放入列表的原因是它将支持RuntimeCompositeCacheDependency,这允许您为同一个缓存配置多个缓存依赖项。

于 2013-08-10T23:47:13.670 回答