Условный кеш пользовательского контроля в 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);
        }

До сих пор он работал нормально, но я хочу снова кэшировать, когда новое значение сеанса изменилось, и его следует кэшировать, пока значение сеанса снова не изменится.

0 ответов

Другие вопросы по тегам