From 32c187f023a319ce09c6d7155f397df388892cf0 Mon Sep 17 00:00:00 2001 From: Stephan Date: Thu, 7 Feb 2013 13:30:06 -0100 Subject: [PATCH] U4-1441 - make trySkipIisCustomError value a setting --- .../Configuration/UmbracoSettings.cs | 166 ++++++++---------- .../config/umbracoSettings.Release.config | 9 + .../config/umbracoSettings.config | 9 + src/Umbraco.Web/Mvc/RenderRouteHandler.cs | 3 +- src/Umbraco.Web/UmbracoModule.cs | 2 +- 5 files changed, 94 insertions(+), 95 deletions(-) diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings.cs b/src/Umbraco.Core/Configuration/UmbracoSettings.cs index aa47426eb8..d5dfa7b641 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings.cs @@ -25,7 +25,37 @@ namespace Umbraco.Core.Configuration /// internal class UmbracoSettings { - /// + private static bool GetKeyWithOverride(string key, bool defaultValue, bool? overrideValue) + { + if (overrideValue.HasValue) + return overrideValue.Value; + + bool value; + string stringValue = GetKey(key); + + if (string.IsNullOrWhiteSpace(stringValue)) + return defaultValue; + if (bool.TryParse(stringValue, out value)) + return value; + return defaultValue; + } + + private static int GetKeyWithOverride(string key, int defaultValue, int? overrideValue) + { + if (overrideValue.HasValue) + return overrideValue.Value; + + int value; + string stringValue = GetKey(key); + + if (string.IsNullOrWhiteSpace(stringValue)) + return defaultValue; + if (int.TryParse(stringValue, out value)) + return value; + return defaultValue; + } + + /// /// Used in unit testing to reset all config items that were set with property setters (i.e. did not come from config) /// internal static void ResetSetters() @@ -35,6 +65,7 @@ namespace Umbraco.Core.Configuration _useLegacySchema = null; _useDomainPrefixes = null; _umbracoLibraryCacheDuration = null; + _trySkipIisCustomErrors = null; SettingsFilePath = null; } @@ -203,6 +234,7 @@ namespace Umbraco.Core.Configuration return value != null ? value.Attributes["assembly"].Value : ""; } } + /// /// Gets the type of an external logger that can be used to store log items in 3rd party systems /// @@ -351,24 +383,13 @@ namespace Umbraco.Core.Configuration { get { - try - { - if (_useDomainPrefixes.HasValue) - return _useDomainPrefixes.Value; - bool result; - if (bool.TryParse(GetKey("/settings/requestHandler/useDomainPrefixes"), out result)) - return result; - return false; - } - catch - { - return false; - } + // default: false + return GetKeyWithOverride("/settings/requestHandler/useDomainPrefixes", false, _useDomainPrefixes); } - // for unit tests only internal set { - _useDomainPrefixes = value; + // for unit tests only + _useDomainPrefixes = value; } } @@ -382,31 +403,14 @@ namespace Umbraco.Core.Configuration { get { - try - { - if (GlobalSettings.UseDirectoryUrls) - { - if (_addTrailingSlash.HasValue) - return _addTrailingSlash.Value; - bool result; - if (bool.TryParse(GetKey("/settings/requestHandler/addTrailingSlash"), out result)) - return result; - return false; - } - else - { - return false; - } - } - catch - { - return false; - } + // default: false + return GlobalSettings.UseDirectoryUrls + && GetKeyWithOverride("/settings/requestHandler/addTrailingSlash", false, _addTrailingSlash); } - // for unit tests only internal set { - _addTrailingSlash = value; + // for unit tests only + _addTrailingSlash = value; } } @@ -623,31 +627,34 @@ namespace Umbraco.Core.Configuration { get { - if (_forceSafeAliases.HasValue) - return _forceSafeAliases.Value; - - string forceSafeAlias = GetKey("/settings/content/ForceSafeAliases"); - if (String.IsNullOrEmpty(forceSafeAlias)) - return true; - else - { - try - { - return bool.Parse(forceSafeAlias); - } - catch - { - return true; - } - } + // default: true + return GetKeyWithOverride("/settings/content/ForceSafeAliases", true, _forceSafeAliases); } internal set { - //used for unit testing + // used for unit testing _forceSafeAliases = value; } } + private static bool? _trySkipIisCustomErrors; + + /// + /// Gets or sets a value indicating where to try to skip IIS custom errors. + /// + public static bool TrySkipIisCustomErrors + { + get + { + // default: false + return GetKeyWithOverride("/settings/TrySkipIisCustomErrors", false, _trySkipIisCustomErrors); + } + internal set + { + // used for unit testing + _trySkipIisCustomErrors = value; + } + } /// /// Gets the allowed image file types. @@ -677,26 +684,14 @@ namespace Umbraco.Core.Configuration { get { - if (_umbracoLibraryCacheDuration.HasValue) - return _umbracoLibraryCacheDuration.Value; - - string libraryCacheDuration = GetKey("/settings/content/UmbracoLibraryCacheDuration"); - if (String.IsNullOrEmpty(libraryCacheDuration)) - return 1800; - else - { - try - { - return int.Parse(libraryCacheDuration); - } - catch - { - return 1800; - } - } - + // default: 1800 + return GetKeyWithOverride("/settings/content/UmbracoLibraryCacheDuration", 1800, _umbracoLibraryCacheDuration); } - internal set { _umbracoLibraryCacheDuration = value; } + internal set + { + // for unit tests only + _umbracoLibraryCacheDuration = value; + } } /// @@ -1052,27 +1047,12 @@ namespace Umbraco.Core.Configuration { get { - try - { - if (_useLegacySchema.HasValue) - return _useLegacySchema.Value; - - string value = GetKey("/settings/content/UseLegacyXmlSchema"); - bool result; - if (!string.IsNullOrEmpty(value) && bool.TryParse(value, out result)) - return result; - return true; - } - catch (Exception) - { - //default. TODO: When we change this to a real config section we won't have to worry about parse errors - // and should handle defaults with unit tests properly. - return false; - } + // default: true + return GetKeyWithOverride("/settings/content/UseLegacyXmlSchema", true, _useLegacySchema); } internal set { - //used for unit testing + // used for unit testing _useLegacySchema = value; } } diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config index 32ab8b714d..1cabd94703 100644 --- a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config +++ b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config @@ -241,4 +241,13 @@ + + false + diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.config b/src/Umbraco.Web.UI/config/umbracoSettings.config index 372777126a..10764d0526 100644 --- a/src/Umbraco.Web.UI/config/umbracoSettings.config +++ b/src/Umbraco.Web.UI/config/umbracoSettings.config @@ -192,4 +192,13 @@ + + false + \ No newline at end of file diff --git a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs index d267677408..865a0e3d05 100644 --- a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs @@ -6,6 +6,7 @@ using System.Web.Mvc; using System.Web.Routing; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Web.Models; using Umbraco.Web.Routing; @@ -337,7 +338,7 @@ namespace Umbraco.Web.Mvc if (publishedContentRequest.Is404) // should always be the case { requestContext.HttpContext.Response.StatusCode = 404; - requestContext.HttpContext.Response.TrySkipIisCustomErrors = true; + requestContext.HttpContext.Response.TrySkipIisCustomErrors = UmbracoSettings.TrySkipIisCustomErrors; } var handler = GetHandlerOnMissingTemplate(publishedContentRequest); diff --git a/src/Umbraco.Web/UmbracoModule.cs b/src/Umbraco.Web/UmbracoModule.cs index a6abe152b9..dc4fb90784 100644 --- a/src/Umbraco.Web/UmbracoModule.cs +++ b/src/Umbraco.Web/UmbracoModule.cs @@ -118,7 +118,7 @@ namespace Umbraco.Web if (pcr.Is404) { httpContext.Response.StatusCode = 404; - httpContext.Response.TrySkipIisCustomErrors = true; + httpContext.Response.TrySkipIisCustomErrors = UmbracoSettings.TrySkipIisCustomErrors; } if (!pcr.HasPublishedContent) httpContext.RemapHandler(new PublishedContentNotFoundHandler());