Условный кеш пользовательского контроля в asp.net - PullRequest
0 голосов
/ 10 сентября 2018

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

 <%@ 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);
        }

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

...