Условный кеш пользовательского контроля в asp.net
У меня есть пользовательский элемент управления, и я хочу его кэшировать, пока сессия не изменится.
<%@ OutputCache Duration="18000" VaryByParam="none" VaryByCustom="changeIt" %>
Теперь он должен кешировать до тех пор, пока Session["UserId"]
не изменяется, но когда значения сеанса изменяются (или даже сеанс становится нулевым), он должен очистить кеш и снова поддерживать до тех пор, пока сеанс не изменится. ТИА.
Я попробовал приведенный ниже код в глобальном файле, но не получил логику (как сравнить текущие и предыдущие значения сеанса):
public override string GetVaryByCustomString(HttpContext ctx, string custom)
{
string name = System.Web.HttpContext.Current.Cache["KeyName"] as string;
if (custom == "changeIt")
{
string lastSessionVal = "", currentSessionVal = "";
if (Session["Last_BusinessID"] != null)
{
lastSessionVal = Convert.ToString(Session["Last_BusinessID"]);
}
if (System.Web.HttpContext.Current.Session["GSID"] != null)
currentSessionVal = Convert.ToString(System.Web.HttpContext.Current.Session["GSID"]);
else if (System.Web.HttpContext.Current.Session["PLID"] != null)
currentSessionVal = Convert.ToString(System.Web.HttpContext.Current.Session["PLID"]);
else
{
Session.Abandon();
Session.Clear();
string webaurl = ConfigurationManager.AppSettings["weburl"];
Response.Redirect(webaurl + "gs/business-provider-login");
}
Session["Last_BusinessID"] = currentSessionVal;
if (lastSessionVal != currentSessionVal)
{
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
//Response.Cache.SetCacheability(HttpCacheability.NoCache);
//Response.Cache.SetNoStore();
Session["ReloadLeftMenus"] = "1";
}
else { Session["ReloadLeftMenus"] = null; }
return Guid.NewGuid().ToString();
}
return base.GetVaryByCustomString(ctx, custom);
}
До сих пор он работал нормально, но я хочу снова кэшировать, когда новое значение сеанса изменилось, и его следует кэшировать, пока значение сеанса снова не изменится.