我需要根据登录用户在缓存中存储动态创建的xmldatasource菜单。以下代码为所有用户返回相同的数据,因为我没有提到登录用户。在添加缓存时我需要在哪里提及登录名?我也希望在从事件接收器添加新站点时重置或删除缓存,因为站点地图必须重新创建。
private static object _lock = new object();
public XmlDocument CacheData()
{
XmlDocument item;
lock (_lock)
{
item = (XmlDocument)Cache["SiteMapCache"];
if (item == null)
{
using (SPSite site = new SPSite(SPContext.Current.Site.Url))
{
SPWebApplication webapp = site.WebApplication;
item = GenerateMenu(webapp);
}
Cache.Add("SiteMapCache",
item, null,
DateTime.Now.AddMinutes(1),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default,
null);
}
return item;
}
}
答案 0 :(得分:0)
一个不知道为什么你会这样做。就像您构建了一个Sharepoint OOTB发布站点一样,会出现用户有权访问的其他子站点。如果您沿着缓存的根目录进行缓存,则最终可能会在缓存中出现大量条目,因为每个条目都需要不同。
否则将USERName添加到CacheKey名称。
然后更改您的代码,以便它首先检查“SiteMapCache”+ Spcontext.Current.Web.CurrentUser.name是否为null,如果它是获取它并将其存储为缓存。
您需要另一个缓存项,以存储已添加到缓存中的用户列表。
然后,如果创建了新站点,则遍历每个站点并将缓存项设置为null。