Beispiel #1
0
        public virtual OutputCacheParameters GetOutputCacheParameters()
        {
            OutputCacheParameters parameters = new OutputCacheParameters();

            parameters.CacheProfile = cacheProfile;
            parameters.Duration     = duration;
            if (context.CurrentPage != null && context.CurrentPage.Expires.HasValue)
            {
                DateTime expires = context.CurrentPage.Expires.Value;
                if (expires > N2.Utility.CurrentTime() && expires < N2.Utility.CurrentTime().AddSeconds(parameters.Duration))
                {
                    parameters.Duration = (int)expires.Subtract(N2.Utility.CurrentTime()).TotalSeconds;
                }
            }
            parameters.Enabled  = Enabled;
            parameters.Location = OutputCacheLocation.Server;
            if (!string.IsNullOrEmpty(varyByHeader))
            {
                parameters.VaryByHeader = varyByHeader;
            }
            if (!string.IsNullOrEmpty(varyByCustom))
            {
                parameters.VaryByCustom = varyByCustom;
            }
            parameters.VaryByParam = varyByParam;
            return(parameters);
        }
Beispiel #2
0
 protected override void GenerateClassAttributes()
 {
     base.GenerateClassAttributes();
     if ((base._sourceDataClass != null) && (this.Parser.OutputCacheParameters != null))
     {
         OutputCacheParameters outputCacheParameters = this.Parser.OutputCacheParameters;
         if (outputCacheParameters.Duration > 0)
         {
             CodeAttributeDeclaration declaration = new CodeAttributeDeclaration("System.Web.UI.PartialCachingAttribute");
             CodeAttributeArgument argument = new CodeAttributeArgument(new CodePrimitiveExpression(outputCacheParameters.Duration));
             declaration.Arguments.Add(argument);
             argument = new CodeAttributeArgument(new CodePrimitiveExpression(outputCacheParameters.VaryByParam));
             declaration.Arguments.Add(argument);
             argument = new CodeAttributeArgument(new CodePrimitiveExpression(outputCacheParameters.VaryByControl));
             declaration.Arguments.Add(argument);
             argument = new CodeAttributeArgument(new CodePrimitiveExpression(outputCacheParameters.VaryByCustom));
             declaration.Arguments.Add(argument);
             argument = new CodeAttributeArgument(new CodePrimitiveExpression(outputCacheParameters.SqlDependency));
             declaration.Arguments.Add(argument);
             argument = new CodeAttributeArgument(new CodePrimitiveExpression(this.Parser.FSharedPartialCaching));
             declaration.Arguments.Add(argument);
             if (MultiTargetingUtil.IsTargetFramework40OrAbove)
             {
                 argument = new CodeAttributeArgument("ProviderName", new CodePrimitiveExpression(this.Parser.Provider));
                 declaration.Arguments.Add(argument);
             }
             base._sourceDataClass.CustomAttributes.Add(declaration);
         }
     }
 }
        public void Test_OutputCacheAttribute()
        {
            OutputCacheAttribute a = new OutputCacheAttribute();

            a.CacheProfile          = "_CacheProfile";
            a.Duration              = 2;
            a.Location              = OutputCacheLocation.Server;
            a.NoStore               = true;
            a.SqlDependency         = "_SqlDependency";
            a.VaryByContentEncoding = "_VaryByContentEncoding";
            a.VaryByCustom          = "_VaryByCustom";
            a.VaryByHeader          = "_VaryByHeader";
            a.VaryByParam           = "_VaryByParam";


            OutputCacheParameters settings = a.CacheSettings;

            Assert.AreEqual(2, settings.Duration);


            string requestText = @"
GET http://www.fish-web-demo.com/Pages/Demo/Authorize/Everyone.aspx HTTP/1.1
";

            using (WebContext context = WebContext.FromRawText(requestText)) {
                try {
                    a.SetResponseCache(context.HttpContext);
                }
                catch { }

                // 这里不太容易做断言,只能看一下代码有没有覆盖。
            }
        }
Beispiel #4
0
        public void ProcessRequest(HttpContext context)
        {
            var physicalFileName = context.Server.MapPath(context.Request.FilePath);

            var dependentFiles = GetFileDependencies(physicalFileName) ?? Enumerable.Empty <string>();

            dependentFiles = dependentFiles.Concat(new[] { physicalFileName }); // ensure this file is included
            context.Response.AddCacheDependency(new CacheDependency(dependentFiles.ToArray()));

            Render(physicalFileName, context.Response.Output);

            // Process with caching ()
            OutputCacheParameters cacheParams = getCacheParams();

            using (OutputCachedPage page = new OutputCachedPage(cacheParams))
            {
                page.ProcessRequest(context);
            }

            // has to be done here as Page seems to overwrite it.
            context.Response.ContentType = ContentType;

            var cache = context.Response.Cache;

            cache.SetLastModifiedFromFileDependencies();
            cache.SetOmitVaryStar(true); // Old IE stops caching if it gets a "Vary: *" header
        }
        internal BuildResultNoCompilePage(Type baseType, TemplateParser parser) : base(baseType, parser)
        {
            PageParser parser2 = (PageParser)parser;

            this._traceEnabled = parser2.TraceEnabled;
            this._traceMode    = parser2.TraceMode;
            if (parser2.OutputCacheParameters != null)
            {
                this._outputCacheData = parser2.OutputCacheParameters;
                if ((this._outputCacheData.Duration == 0) || (this._outputCacheData.Location == OutputCacheLocation.None))
                {
                    this._outputCacheData = null;
                }
                else
                {
                    this._fileDependencies = new string[parser2.SourceDependencies.Count];
                    int num = 0;
                    foreach (string str in (IEnumerable)parser2.SourceDependencies)
                    {
                        this._fileDependencies[num++] = str;
                    }
                }
            }
            this._validateRequest = parser2.ValidateRequest;
            this._stylesheetTheme = parser2.StyleSheetTheme;
        }
        protected ActionResult CacheableView(string viewName, Query.Query query, Func <ModelCollection> modelAccessor, Action <OutputCacheParameters> changeSettings)
        {
            if (query.IsCacheable)
            {
                var settings = new OutputCacheParameters
                {
                    Duration              = query.CacheDuration,
                    VaryByParam           = null,
                    VaryByContentEncoding = null,
                    VaryByControl         = null,
                    VaryByCustom          = null,
                    VaryByHeader          = null
                };

                changeSettings(settings);

                return(new CacheableViewResult
                {
                    ViewName = viewName,
                    ViewData = ViewData,
                    TempData = TempData,
                    ModelAccessor = modelAccessor,
                    CacheSettings = settings
                });
            }
            return(View(viewName, modelAccessor()));
        }
Beispiel #7
0
        public virtual OutputCacheParameters GetOutputCacheParameters()
        {
            OutputCacheParameters parameters = new OutputCacheParameters();

            parameters.CacheProfile = cacheProfile;
            parameters.Duration     = duration;
            if (context.CurrentPage != null && context.CurrentPage.Expires.HasValue)
            {
                DateTime expires = context.CurrentPage.Expires.Value;
                if (expires > N2.Utility.CurrentTime() && expires < N2.Utility.CurrentTime().AddSeconds(parameters.Duration))
                {
                    parameters.Duration = (int)expires.Subtract(N2.Utility.CurrentTime()).TotalSeconds;
                }
            }
            parameters.Enabled  = enabled;
            parameters.Location = OutputCacheLocation.Server;
            //parameters.NoStore = NoStore;
            //parameters.SqlDependency = SqlDependency;
            //parameters.VaryByContentEncoding = VaryByContentEncoding;
            //parameters.VaryByControl = VaryByControl;
            //parameters.VaryByCustom = VaryByCustom;
            //parameters.VaryByHeader = VaryByHeader;
            parameters.VaryByParam = varyByParam;
            return(parameters);
        }
        public void CacheSettingsProperty()
        {
            // Arrange
            OutputCacheAttribute attr = new OutputCacheAttribute()
            {
                CacheProfile          = "SomeProfile",
                Duration              = 50,
                Location              = OutputCacheLocation.Downstream,
                NoStore               = true,
                SqlDependency         = "SomeSqlDependency",
                VaryByContentEncoding = "SomeContentEncoding",
                VaryByCustom          = "SomeCustom",
                VaryByHeader          = "SomeHeader",
                VaryByParam           = "SomeParam",
            };

            // Act
            OutputCacheParameters cacheSettings = attr.CacheSettings;

            // Assert
            Assert.Equal("SomeProfile", cacheSettings.CacheProfile);
            Assert.Equal(50, cacheSettings.Duration);
            Assert.Equal(OutputCacheLocation.Downstream, cacheSettings.Location);
            Assert.Equal(true, cacheSettings.NoStore);
            Assert.Equal("SomeSqlDependency", cacheSettings.SqlDependency);
            Assert.Equal("SomeContentEncoding", cacheSettings.VaryByContentEncoding);
            Assert.Equal("SomeCustom", cacheSettings.VaryByCustom);
            Assert.Equal("SomeHeader", cacheSettings.VaryByHeader);
            Assert.Equal("SomeParam", cacheSettings.VaryByParam);
        }
Beispiel #9
0
        public static void InitOutputCache(ICacheManager cacheManager, HttpContext context)
        {
            if (!cacheManager.Enabled)
            {
                return;
            }

            OutputCacheParameters cacheSettings = cacheManager.GetOutputCacheParameters();
        }
        internal BuildResultNoCompileUserControl(Type baseType, TemplateParser parser) : base(baseType, parser)
        {
            UserControlParser     parser2 = (UserControlParser)parser;
            OutputCacheParameters outputCacheParameters = parser2.OutputCacheParameters;

            if ((outputCacheParameters != null) && (outputCacheParameters.Duration > 0))
            {
                this._cachingAttribute = new PartialCachingAttribute(outputCacheParameters.Duration, outputCacheParameters.VaryByParam, outputCacheParameters.VaryByControl, outputCacheParameters.VaryByCustom, outputCacheParameters.SqlDependency, parser2.FSharedPartialCaching);
                this._cachingAttribute.ProviderName = parser2.Provider;
            }
        }
        public void InitialValues()
        {
            OutputCacheParameters o = new OutputCacheParameters();

            Assert.IsNull(o.CacheProfile, "CacheProfile");
            Assert.IsTrue(o.Duration == 0, "Duration");
            Assert.IsTrue(o.Enabled, "Enabled");
            Assert.IsTrue(o.Location == OutputCacheLocation.Any, "OutputCacheLocation");
            Assert.IsFalse(o.NoStore, "NoStore");
            Assert.IsNull(o.SqlDependency, "SqlDependency");
            Assert.IsNull(o.VaryByControl, "VaryByControl");
            Assert.IsNull(o.VaryByCustom, "VaryByCustom");
            Assert.IsNull(o.VaryByHeader, "VaryByHeader");
            Assert.IsNull(o.VaryByParam, "VaryByParam");
        }
        private void CheckFirefoxChecking()
        {
            if (!Request.UserAgent.Contains("Mozilla"))
            {
                return;
            }

            var outputCacheSettings = new OutputCacheParameters()
            {
                Duration = 0,
                Location = OutputCacheLocation.None,
                NoStore  = true
            };

            InitOutputCache(outputCacheSettings);
        }
        protected override void BuildFrameworkInitializeMethodContents(CodeMemberMethod method)
        {
            if (this.Parser.StyleSheetTheme != null)
            {
                CodeExpression      right     = new CodePrimitiveExpression(this.Parser.StyleSheetTheme);
                CodeExpression      left      = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "StyleSheetTheme");
                CodeAssignStatement statement = new CodeAssignStatement(left, right);
                method.Statements.Add(statement);
            }
            base.BuildFrameworkInitializeMethodContents(method);
            CodeMethodInvokeExpression expression3 = new CodeMethodInvokeExpression {
                Method = { TargetObject = new CodeThisReferenceExpression(), MethodName = "AddWrappedFileDependencies" }
            };

            expression3.Parameters.Add(new CodeFieldReferenceExpression(base._classTypeExpr, "__fileDependencies"));
            method.Statements.Add(expression3);
            if (this.Parser.OutputCacheParameters != null)
            {
                OutputCacheParameters outputCacheParameters = this.Parser.OutputCacheParameters;
                if (((outputCacheParameters.CacheProfile != null) && (outputCacheParameters.CacheProfile.Length != 0)) || ((outputCacheParameters.Duration != 0) || (outputCacheParameters.Location == OutputCacheLocation.None)))
                {
                    CodeMethodInvokeExpression expression4 = new CodeMethodInvokeExpression {
                        Method = { TargetObject = new CodeThisReferenceExpression(), MethodName = "InitOutputCache" }
                    };
                    expression4.Parameters.Add(new CodeFieldReferenceExpression(base._classTypeExpr, "__outputCacheSettings"));
                    method.Statements.Add(expression4);
                }
            }
            if (this.Parser.TraceEnabled != TraceEnable.Default)
            {
                method.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "TraceEnabled"), new CodePrimitiveExpression(this.Parser.TraceEnabled == TraceEnable.Enable)));
            }
            if (this.Parser.TraceMode != TraceMode.Default)
            {
                method.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "TraceModeValue"), new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(TraceMode)), this.Parser.TraceMode.ToString())));
            }
            if (this.Parser.ValidateRequest)
            {
                CodeMethodInvokeExpression expression = new CodeMethodInvokeExpression {
                    Method = { TargetObject = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Request"), MethodName = "ValidateInput" }
                };
                method.Statements.Add(new CodeExpressionStatement(expression));
            }
        }
Beispiel #14
0
        static OutputCacheParameters getCacheParams()
        {
            OutputCacheParameters cacheParams;

            if (cacheProfileExists(CACHE_PROFILE_NAME))
            {
                cacheParams = new OutputCacheParameters
                {
                    CacheProfile = CACHE_PROFILE_NAME
                };
            }
            else // default
            {
                cacheParams = new OutputCacheParameters
                {
                    Duration    = 86400, // 1 day
                    Enabled     = true,
                    Location    = OutputCacheLocation.Any,
                    VaryByParam = "*"
                };
            }
            return(cacheParams);
        }
        /*
         * Add metadata attributes to the class
         */
        protected override void GenerateClassAttributes()
        {
            base.GenerateClassAttributes();

            // If the user control has an OutputCache directive, generate
            // an attribute with the information about it.
            if (_sourceDataClass != null && Parser.OutputCacheParameters != null)
            {
                OutputCacheParameters cacheSettings = Parser.OutputCacheParameters;
                if (cacheSettings.Duration > 0)
                {
                    CodeAttributeDeclaration attribDecl = new CodeAttributeDeclaration(
                        "System.Web.UI.PartialCachingAttribute");
                    CodeAttributeArgument attribArg = new CodeAttributeArgument(
                        new CodePrimitiveExpression(cacheSettings.Duration));
                    attribDecl.Arguments.Add(attribArg);
                    attribArg = new CodeAttributeArgument(new CodePrimitiveExpression(cacheSettings.VaryByParam));
                    attribDecl.Arguments.Add(attribArg);
                    attribArg = new CodeAttributeArgument(new CodePrimitiveExpression(cacheSettings.VaryByControl));
                    attribDecl.Arguments.Add(attribArg);
                    attribArg = new CodeAttributeArgument(new CodePrimitiveExpression(cacheSettings.VaryByCustom));
                    attribDecl.Arguments.Add(attribArg);
                    attribArg = new CodeAttributeArgument(new CodePrimitiveExpression(cacheSettings.SqlDependency));
                    attribDecl.Arguments.Add(attribArg);
                    attribArg = new CodeAttributeArgument(new CodePrimitiveExpression(Parser.FSharedPartialCaching));
                    attribDecl.Arguments.Add(attribArg);
                    // Use the providerName argument only when targeting 4.0 and above.
                    if (MultiTargetingUtil.IsTargetFramework40OrAbove)
                    {
                        attribArg = new CodeAttributeArgument("ProviderName", new CodePrimitiveExpression(Parser.Provider));
                        attribDecl.Arguments.Add(attribArg);
                    }

                    _sourceDataClass.CustomAttributes.Add(attribDecl);
                }
            }
        }
        /*
         * Build the contents of the FrameworkInitialize method
         */
        protected override void BuildFrameworkInitializeMethodContents(CodeMemberMethod method)
        {
            // Generate code to apply stylesheet before calling base.FrameworkInitialize();
            if (Parser.StyleSheetTheme != null)
            {
                CodeExpression      rightExpr   = new CodePrimitiveExpression(Parser.StyleSheetTheme);
                CodeExpression      leftExpr    = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), _styleSheetThemePropertyName);
                CodeAssignStatement setStatment = new CodeAssignStatement(leftExpr, rightExpr);
                method.Statements.Add(setStatment);
            }

            base.BuildFrameworkInitializeMethodContents(method);

            CodeMethodInvokeExpression addDeps = new CodeMethodInvokeExpression();

            addDeps.Method.TargetObject = new CodeThisReferenceExpression();
            addDeps.Method.MethodName   = "AddWrappedFileDependencies";
            addDeps.Parameters.Add(new CodeFieldReferenceExpression(_classTypeExpr, fileDependenciesName));
            method.Statements.Add(addDeps);

            if (Parser.OutputCacheParameters != null)
            {
                OutputCacheParameters cacheSettings = Parser.OutputCacheParameters;
                if ((cacheSettings.CacheProfile != null && cacheSettings.CacheProfile.Length != 0) ||
                    cacheSettings.Duration != 0 ||
                    cacheSettings.Location == OutputCacheLocation.None)
                {
                    CodeMethodInvokeExpression call = new CodeMethodInvokeExpression();
                    call.Method.TargetObject = new CodeThisReferenceExpression();
                    call.Method.MethodName   = "InitOutputCache";
                    call.Parameters.Add(new CodeFieldReferenceExpression(
                                            _classTypeExpr,
                                            outputCacheSettingsFieldName));

                    method.Statements.Add(call);
                }
            }

            if (Parser.TraceEnabled != TraceEnable.Default)
            {
                method.Statements.Add(new CodeAssignStatement(
                                          new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "TraceEnabled"),
                                          new CodePrimitiveExpression(Parser.TraceEnabled == TraceEnable.Enable)));
            }

            if (Parser.TraceMode != TraceMode.Default)
            {
                method.Statements.Add(new CodeAssignStatement(
                                          new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "TraceModeValue"),
                                          new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(TraceMode)), Parser.TraceMode.ToString())));
            }

            if (Parser.ValidateRequest)
            {
                // e.g. Request.ValidateInput();
                CodeMethodInvokeExpression invokeExpr = new CodeMethodInvokeExpression();
                invokeExpr.Method.TargetObject = new CodePropertyReferenceExpression(
                    new CodeThisReferenceExpression(), "Request");
                invokeExpr.Method.MethodName = "ValidateInput";
                method.Statements.Add(new CodeExpressionStatement(invokeExpr));
            }
            else if (MultiTargetingUtil.TargetFrameworkVersion >= VersionUtil.Framework45)
            {
                // Only emit the ValidateRequestMode setter if the target framework is 4.5 or higher.
                // On frameworks 4.0 and earlier that property did not exist.
                CodePropertyReferenceExpression left = new CodePropertyReferenceExpression(
                    new CodeThisReferenceExpression(), "ValidateRequestMode");
                CodeFieldReferenceExpression right = new CodeFieldReferenceExpression(
                    new CodeTypeReferenceExpression(typeof(ValidateRequestMode)), "Disabled");
                CodeAssignStatement statement = new CodeAssignStatement(left, right);
                method.Statements.Add(statement);
            }
        }
 public OutputCachedPage(OutputCacheParameters cacheSettings)
 {
     this.ID        = Guid.NewGuid().ToString();
     _cacheSettings = cacheSettings;
 }
 public CustomOutputCacheAttribute()
 {
     _cacheSettings = new OutputCacheParameters {
         VaryByParam = "*"
     };
 }
 protected override void BuildDefaultConstructor()
 {
     base.BuildDefaultConstructor();
     if (base.CompilParams.IncludeDebugInformation)
     {
         CodeAssignStatement statement = new CodeAssignStatement {
             Left  = new CodePropertyReferenceExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Server"), "ScriptTimeout"),
             Right = new CodePrimitiveExpression(0x1c9c380)
         };
         base._ctor.Statements.Add(statement);
     }
     if (this.Parser.TransactionMode != 0)
     {
         base._ctor.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "TransactionMode"), new CodePrimitiveExpression(this.Parser.TransactionMode)));
     }
     if (this.Parser.AspCompatMode)
     {
         base._ctor.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "AspCompatMode"), new CodePrimitiveExpression(this.Parser.AspCompatMode)));
     }
     if (this.Parser.AsyncMode)
     {
         base._ctor.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "AsyncMode"), new CodePrimitiveExpression(this.Parser.AsyncMode)));
     }
     if (this.Parser.OutputCacheParameters != null)
     {
         OutputCacheParameters outputCacheParameters = this.Parser.OutputCacheParameters;
         if (((outputCacheParameters.CacheProfile != null) && (outputCacheParameters.CacheProfile.Length != 0)) || ((outputCacheParameters.Duration != 0) || (outputCacheParameters.Location == OutputCacheLocation.None)))
         {
             CodeMemberField field;
             field = new CodeMemberField(typeof(OutputCacheParameters), "__outputCacheSettings")
             {
                 Attributes     = field.Attributes | MemberAttributes.Static,
                 InitExpression = new CodePrimitiveExpression(null)
             };
             base._sourceDataClass.Members.Add(field);
             CodeConditionStatement statement2 = new CodeConditionStatement {
                 Condition = new CodeBinaryOperatorExpression(new CodeFieldReferenceExpression(base._classTypeExpr, "__outputCacheSettings"), CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(null))
             };
             CodeVariableDeclarationStatement statement3 = new CodeVariableDeclarationStatement {
                 Type = new CodeTypeReference(typeof(OutputCacheParameters)),
                 Name = "outputCacheSettings"
             };
             statement2.TrueStatements.Insert(0, statement3);
             CodeObjectCreateExpression right = new CodeObjectCreateExpression {
                 CreateType = new CodeTypeReference(typeof(OutputCacheParameters))
             };
             CodeVariableReferenceExpression left       = new CodeVariableReferenceExpression("outputCacheSettings");
             CodeAssignStatement             statement4 = new CodeAssignStatement(left, right);
             statement2.TrueStatements.Add(statement4);
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.CacheProfile))
             {
                 CodeAssignStatement statement5 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "CacheProfile"), new CodePrimitiveExpression(outputCacheParameters.CacheProfile));
                 statement2.TrueStatements.Add(statement5);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.Duration))
             {
                 CodeAssignStatement statement6 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "Duration"), new CodePrimitiveExpression(outputCacheParameters.Duration));
                 statement2.TrueStatements.Add(statement6);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.Enabled))
             {
                 CodeAssignStatement statement7 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "Enabled"), new CodePrimitiveExpression(outputCacheParameters.Enabled));
                 statement2.TrueStatements.Add(statement7);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.Location))
             {
                 CodeAssignStatement statement8 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "Location"), new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(OutputCacheLocation)), outputCacheParameters.Location.ToString()));
                 statement2.TrueStatements.Add(statement8);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.NoStore))
             {
                 CodeAssignStatement statement9 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "NoStore"), new CodePrimitiveExpression(outputCacheParameters.NoStore));
                 statement2.TrueStatements.Add(statement9);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.SqlDependency))
             {
                 CodeAssignStatement statement10 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "SqlDependency"), new CodePrimitiveExpression(outputCacheParameters.SqlDependency));
                 statement2.TrueStatements.Add(statement10);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.VaryByControl))
             {
                 CodeAssignStatement statement11 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "VaryByControl"), new CodePrimitiveExpression(outputCacheParameters.VaryByControl));
                 statement2.TrueStatements.Add(statement11);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.VaryByCustom))
             {
                 CodeAssignStatement statement12 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "VaryByCustom"), new CodePrimitiveExpression(outputCacheParameters.VaryByCustom));
                 statement2.TrueStatements.Add(statement12);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.VaryByContentEncoding))
             {
                 CodeAssignStatement statement13 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "VaryByContentEncoding"), new CodePrimitiveExpression(outputCacheParameters.VaryByContentEncoding));
                 statement2.TrueStatements.Add(statement13);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.VaryByHeader))
             {
                 CodeAssignStatement statement14 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "VaryByHeader"), new CodePrimitiveExpression(outputCacheParameters.VaryByHeader));
                 statement2.TrueStatements.Add(statement14);
             }
             if (outputCacheParameters.IsParameterSet(OutputCacheParameter.VaryByParam))
             {
                 CodeAssignStatement statement15 = new CodeAssignStatement(new CodePropertyReferenceExpression(left, "VaryByParam"), new CodePrimitiveExpression(outputCacheParameters.VaryByParam));
                 statement2.TrueStatements.Add(statement15);
             }
             CodeFieldReferenceExpression expression3 = new CodeFieldReferenceExpression(base._classTypeExpr, "__outputCacheSettings");
             CodeAssignStatement          statement16 = new CodeAssignStatement(expression3, left);
             statement2.TrueStatements.Add(statement16);
             base._ctor.Statements.Add(statement2);
         }
     }
 }
Beispiel #20
0
 protected virtual void InitOutputCache(OutputCacheParameters parameters)
 {
     new OutputCachedPage(parameters).ProcessRequest(this.Context);
 }
        /*
         * Build the default constructor
         */
        protected override void BuildDefaultConstructor()
        {
            base.BuildDefaultConstructor();

            if (CompilParams.IncludeDebugInformation)
            {
                // If in debug mode, set the timeout to some huge value (ASURT 49427)
                //      Server.ScriptTimeout = 30000000;
                CodeAssignStatement setScriptTimeout = new CodeAssignStatement();
                setScriptTimeout.Left = new CodePropertyReferenceExpression(
                    new CodePropertyReferenceExpression(
                        new CodeThisReferenceExpression(), "Server"),
                    "ScriptTimeout");
                setScriptTimeout.Right = new CodePrimitiveExpression(DebugScriptTimeout);
                _ctor.Statements.Add(setScriptTimeout);
            }

            if (Parser.TransactionMode != 0 /*TransactionOption.Disabled*/)
            {
                _ctor.Statements.Add(new CodeAssignStatement(
                                         new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "TransactionMode"),
                                         new CodePrimitiveExpression(Parser.TransactionMode)));
            }

            if (Parser.AspCompatMode)
            {
                _ctor.Statements.Add(new CodeAssignStatement(
                                         new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "AspCompatMode"),
                                         new CodePrimitiveExpression(Parser.AspCompatMode)));
            }

            if (Parser.AsyncMode)
            {
                _ctor.Statements.Add(new CodeAssignStatement(
                                         new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "AsyncMode"),
                                         new CodePrimitiveExpression(Parser.AsyncMode)));
            }

            if (Parser.OutputCacheParameters != null)
            {
                OutputCacheParameters cacheSettings = Parser.OutputCacheParameters;
                if ((cacheSettings.CacheProfile != null && cacheSettings.CacheProfile.Length != 0) ||
                    cacheSettings.Duration != 0 ||
                    cacheSettings.Location == OutputCacheLocation.None)
                {
                    // Add the following code snippet as a static on the class:
                    //
                    // private static OutputCacheParameters __outputCacheSettings = null;
                    //
                    CodeMemberField outputCacheSettingsField = new CodeMemberField(typeof(OutputCacheParameters), outputCacheSettingsFieldName);
                    outputCacheSettingsField.Attributes    |= MemberAttributes.Static;
                    outputCacheSettingsField.InitExpression = new CodePrimitiveExpression(null);
                    _sourceDataClass.Members.Add(outputCacheSettingsField);

                    // Then, add the following code to the default constructor:
                    //
                    // if (__outputCacheSettings == null)
                    //     __outputCacheSettings = new OutputCacheParameters(.....)
                    //

                    // This is the "if (__outputCacheSettings == null)" part
                    CodeConditionStatement outputCacheSettingsCondition = new CodeConditionStatement();
                    outputCacheSettingsCondition.Condition = new CodeBinaryOperatorExpression(
                        new CodeFieldReferenceExpression(
                            _classTypeExpr,
                            outputCacheSettingsFieldName),
                        CodeBinaryOperatorType.IdentityEquality,
                        new CodePrimitiveExpression(null));

                    // This is the "__outputCacheSettings = new OutputCacheParameters()" part


                    // e.g. declare local variable: OutputCacheParameters outputCacheSettings;
                    CodeVariableDeclarationStatement outputCacheSettingsDeclaration = new CodeVariableDeclarationStatement();
                    outputCacheSettingsDeclaration.Type = new CodeTypeReference(typeof(OutputCacheParameters));
                    outputCacheSettingsDeclaration.Name = outputCacheSettingsLocalName;
                    outputCacheSettingsCondition.TrueStatements.Insert(0, outputCacheSettingsDeclaration);

                    // e.g. outputCacheSettings = new outputCacheParameters;
                    CodeObjectCreateExpression cacheSettingsObject = new CodeObjectCreateExpression();
                    cacheSettingsObject.CreateType = new CodeTypeReference(typeof(OutputCacheParameters));

                    CodeVariableReferenceExpression outputCacheSettings =
                        new CodeVariableReferenceExpression(outputCacheSettingsLocalName);

                    CodeAssignStatement setOutputCacheObject =
                        new CodeAssignStatement(outputCacheSettings, cacheSettingsObject);

                    // Add the statement to the "true" clause
                    outputCacheSettingsCondition.TrueStatements.Add(setOutputCacheObject);

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.CacheProfile))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "CacheProfile"),
                            new CodePrimitiveExpression(cacheSettings.CacheProfile));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.Duration))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "Duration"),
                            new CodePrimitiveExpression(cacheSettings.Duration));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.Enabled))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "Enabled"),
                            new CodePrimitiveExpression(cacheSettings.Enabled));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.Location))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "Location"),
                            new CodeFieldReferenceExpression(
                                new CodeTypeReferenceExpression(typeof(OutputCacheLocation)),
                                cacheSettings.Location.ToString()));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.NoStore))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "NoStore"),
                            new CodePrimitiveExpression(cacheSettings.NoStore));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.SqlDependency))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "SqlDependency"),
                            new CodePrimitiveExpression(cacheSettings.SqlDependency));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.VaryByControl))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "VaryByControl"),
                            new CodePrimitiveExpression(cacheSettings.VaryByControl));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.VaryByCustom))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "VaryByCustom"),
                            new CodePrimitiveExpression(cacheSettings.VaryByCustom));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.VaryByContentEncoding))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "VaryByContentEncoding"),
                            new CodePrimitiveExpression(cacheSettings.VaryByContentEncoding));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }
                    if (cacheSettings.IsParameterSet(OutputCacheParameter.VaryByHeader))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "VaryByHeader"),
                            new CodePrimitiveExpression(cacheSettings.VaryByHeader));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    if (cacheSettings.IsParameterSet(OutputCacheParameter.VaryByParam))
                    {
                        CodeAssignStatement setPropertyStatement = new CodeAssignStatement(
                            new CodePropertyReferenceExpression(outputCacheSettings, "VaryByParam"),
                            new CodePrimitiveExpression(cacheSettings.VaryByParam));

                        outputCacheSettingsCondition.TrueStatements.Add(setPropertyStatement);
                    }

                    // e.g. __outputCacheSettings = outputCacheSettings;
                    CodeFieldReferenceExpression staticOutputCacheSettings =
                        new CodeFieldReferenceExpression(_classTypeExpr, outputCacheSettingsFieldName);
                    CodeAssignStatement assignOutputCacheSettings =
                        new CodeAssignStatement(staticOutputCacheSettings, outputCacheSettings);
                    // Add the statement to the "true" clause
                    outputCacheSettingsCondition.TrueStatements.Add(assignOutputCacheSettings);

                    _ctor.Statements.Add(outputCacheSettingsCondition);
                }
            }
        }
Beispiel #22
0
 public OutputCachedPage(OutputCacheParameters cacheSettings)
 {
     // Tracing requires Page IDs to be unique.
     ID             = Guid.NewGuid().ToString();
     _cacheSettings = cacheSettings;
 }
Beispiel #23
0
 // Methods
 public OutputCachedPage(OutputCacheParameters cacheParams)
 {
     this.ID           = Guid.NewGuid().ToString();
     this._cacheParams = cacheParams;
 }