1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
|
//------------------------------------------------------------------------------
// <copyright file="OutputCacheSection.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
namespace System.Web.Configuration {
using System;
using System.Xml;
using System.Configuration;
using System.Collections.Specialized;
using System.Collections;
using System.Globalization;
using System.IO;
using System.Text;
using System.Security.Permissions;
using System.Web.Caching;
/* <!--
outputCache Attributes:
enableOutputCache="[true|false]" - Enable or disable the output cache
enableFragmentCache="[true|false]" - Enable or disable the fragment (user control) cache
sendCacheControlHeader="[true|false]" - Enables automatic insertion of "Cache-Control: private" header
omitVaryStar="[true|false]" - Enables automatic insertion of "Vary: *" header
enableKernelCacheForVaryByStar="[true|false]" - Enable kernel caching for "Vary: *" header even with non-empty query string
-->
<outputCache enableOutputCache="true" enableFragmentCache="true" sendCacheControlHeader = "true" omitVaryStar="false">
</outputCache>
*/
public sealed class OutputCacheSection : ConfigurationSection {
internal const bool DefaultOmitVaryStar = false;
private static ConfigurationPropertyCollection _properties;
private static readonly ConfigurationProperty _propEnableOutputCache =
new ConfigurationProperty("enableOutputCache",
typeof(bool),
true,
ConfigurationPropertyOptions.None);
private static readonly ConfigurationProperty _propEnableFragmentCache =
new ConfigurationProperty("enableFragmentCache",
typeof(bool),
true,
ConfigurationPropertyOptions.None);
private static readonly ConfigurationProperty _propSendCacheControlHeader =
new ConfigurationProperty("sendCacheControlHeader",
typeof(bool),
HttpRuntimeSection.DefaultSendCacheControlHeader,
ConfigurationPropertyOptions.None);
private static readonly ConfigurationProperty _propOmitVaryStar =
new ConfigurationProperty("omitVaryStar",
typeof(bool),
DefaultOmitVaryStar,
ConfigurationPropertyOptions.None);
private static readonly ConfigurationProperty _propEnableKernelCacheForVaryByStar =
new ConfigurationProperty("enableKernelCacheForVaryByStar",
typeof(bool),
false,
ConfigurationPropertyOptions.None);
private static readonly ConfigurationProperty _propDefaultProviderName =
new ConfigurationProperty("defaultProvider",
typeof(String),
OutputCache.ASPNET_INTERNAL_PROVIDER_NAME, //defaultValue
null,
StdValidatorsAndConverters.NonEmptyStringValidator,
ConfigurationPropertyOptions.None);
private static readonly ConfigurationProperty _propProviders =
new ConfigurationProperty("providers",
typeof(ProviderSettingsCollection),
null, // defaultValue
ConfigurationPropertyOptions.None);
private bool sendCacheControlHeaderCached = false;
private bool sendCacheControlHeaderCache;
private bool omitVaryStarCached = false;
private bool omitVaryStar;
private bool enableKernelCacheForVaryByStarCached = false;
private bool enableKernelCacheForVaryByStar;
private bool enableOutputCacheCached = false;
private bool enableOutputCache;
static OutputCacheSection() {
// Property initialization
_properties = new ConfigurationPropertyCollection();
_properties.Add(_propEnableOutputCache);
_properties.Add(_propEnableFragmentCache);
_properties.Add(_propSendCacheControlHeader);
_properties.Add(_propOmitVaryStar);
_properties.Add(_propEnableKernelCacheForVaryByStar);
_properties.Add(_propDefaultProviderName);
_properties.Add(_propProviders);
}
public OutputCacheSection() {
}
protected override ConfigurationPropertyCollection Properties {
get {
return _properties;
}
}
[ConfigurationProperty("enableOutputCache", DefaultValue = true)]
public bool EnableOutputCache {
get {
if (enableOutputCacheCached == false) {
enableOutputCache = (bool)base[_propEnableOutputCache];
enableOutputCacheCached = true;
}
return enableOutputCache;
}
set {
base[_propEnableOutputCache] = value;
enableOutputCache = value;
}
}
[ConfigurationProperty("enableFragmentCache", DefaultValue = true)]
public bool EnableFragmentCache {
get {
return (bool)base[_propEnableFragmentCache];
}
set {
base[_propEnableFragmentCache] = value;
}
}
[ConfigurationProperty("sendCacheControlHeader", DefaultValue = HttpRuntimeSection.DefaultSendCacheControlHeader)]
public bool SendCacheControlHeader {
get {
if (sendCacheControlHeaderCached == false) {
sendCacheControlHeaderCache = (bool)base[_propSendCacheControlHeader];
sendCacheControlHeaderCached = true;
}
return sendCacheControlHeaderCache;
}
set {
base[_propSendCacheControlHeader] = value;
sendCacheControlHeaderCache = value;
}
}
[ConfigurationProperty("omitVaryStar", DefaultValue = DefaultOmitVaryStar)]
public bool OmitVaryStar {
get {
if (omitVaryStarCached == false) {
omitVaryStar = (bool)base[_propOmitVaryStar];
omitVaryStarCached = true;
}
return omitVaryStar;
}
set {
base[_propOmitVaryStar] = value;
omitVaryStar = value;
}
}
[ConfigurationProperty("enableKernelCacheForVaryByStar", DefaultValue = false)]
public bool EnableKernelCacheForVaryByStar {
get {
if (enableKernelCacheForVaryByStarCached == false) {
enableKernelCacheForVaryByStar = (bool)base[_propEnableKernelCacheForVaryByStar];
enableKernelCacheForVaryByStarCached = true;
}
return enableKernelCacheForVaryByStar;
}
set {
base[_propEnableKernelCacheForVaryByStar] = value;
enableKernelCacheForVaryByStar = value;
}
}
[ConfigurationProperty("defaultProvider", DefaultValue = OutputCache.ASPNET_INTERNAL_PROVIDER_NAME)]
[StringValidator(MinLength = 1)]
public String DefaultProviderName {
get {
return (string) base[_propDefaultProviderName];
}
set {
base[_propDefaultProviderName] = value;
}
}
[ConfigurationProperty("providers")]
public ProviderSettingsCollection Providers {
get {
return (ProviderSettingsCollection)base[_propProviders];
}
}
[PermissionSet(SecurityAction.Assert, Unrestricted = true)]
internal OutputCacheProviderCollection CreateProviderCollection() {
// if there are no providers defined, we'll default to the v2.0 OutputCache
ProviderSettingsCollection providers = Providers;
if (providers == null || providers.Count == 0) {
return null;
}
OutputCacheProviderCollection collection = new OutputCacheProviderCollection();
ProvidersHelper.InstantiateProviders(providers, collection, typeof(OutputCacheProvider));
collection.SetReadOnly();
return collection;
}
internal OutputCacheProvider GetDefaultProvider(OutputCacheProviderCollection providers) {
// if defaultProvider is undefined, we'll default to the v2.0 OutputCache
string defaultProviderName = DefaultProviderName;
if (defaultProviderName == OutputCache.ASPNET_INTERNAL_PROVIDER_NAME) {
return null;
}
// if the defaultProvider is defined, it must be in the providers collection
OutputCacheProvider defaultProvider = (providers == null) ? null : providers[defaultProviderName];
if (defaultProvider == null) {
throw new ConfigurationErrorsException(SR.GetString(SR.Def_provider_not_found),
ElementInformation.Properties["defaultProvider"].Source,
ElementInformation.Properties["defaultProvider"].LineNumber);
}
return defaultProvider;
}
}
}
|