Try our conversational search powered by Generative AI!

Saving system settings in Admin when web.config contains custom regex exclude pattern crashes the site

Found in

EPiServer.CMS.Core 7.0.586.0

Fixed in

EPiServer.CMS.Core 10.4.1

(Or a related package)

Created

Nov 28, 2016

Updated

Jun 27, 2018

Area

CMS Core

State

Closed, Fixed and tested


Description

1. Add a regex into the LinkValidation element in web.config:

<linkValidator externalLinkErrorThreshold="100" recheckInterval="7.00:00:00">
  <excludePatterns>
   <add regex=".*doc"/>
  </excludePatterns>
</linkValidator>

2. Make a change to system settings (Admin -> System Settings -> Enable Projects) and reload the site.
3. You receive the below error because, in the web.config, the configuration has automatically been changed to:

<linkValidator externalLinkErrorThreshold="100" recheckInterval="7.00:00:00">
    <excludePatterns regex=".*doc" />
</linkValidator> 

----------------------------------------
Error in the browser:

Configuration Error

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Unrecognized attribute 'regex'. Note that attribute names are case-sensitive.

Source Error:

Line 272: </imageEditor>
Line 273: <linkValidator externalLinkErrorThreshold="100" recheckInterval="7.00:00:00">
Line 274: <excludePatterns regex=".*doc" />
Line 275: </linkValidator>
Line 276: </episerver>

Source File: F:\Visual Studio 2015\Projects\cms10b\cms10b\web.config Line: 274

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1055.0


Stacktrace in Episerver logfile:

2016-11-28 11:14:43,082 [18] ERROR EPiServer.Framework.Initialization.InitializationEngine: Initialize action failed for 'Initialize on class EPiServer.Framework.FrameworkInitialization, EPiServer.Framework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=8fe83dea738b45b7'
System.Configuration.ConfigurationErrorsException: Unrecognized attribute 'regex'. Note that attribute names are case-sensitive. (F:\Visual Studio 2015\Projects\cms10b\cms10b\web.config line 274)
at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult)
at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at EPiServer.Framework.Configuration.FileConfigurationSource.Get[T](String path)
at EPiServer.Configuration.EPiServerSection.EnsureCurrentConfig()
at EPiServer.Configuration.EPiServerSection.get_Instance()
at EPiServer.Configuration.Settings.get_Instance()
at EPiServer.UriSupport.get_InternalUtilUrl()
at EPiServer.Cms.Shell.VppInitializer.CreateProviders(InitializationEngine context)
at EPiServer.Web.Hosting.VirtualPathRegistrationHandler.<>c_DisplayClass8_0.<RegisterVirtualPathProvidersFromCode>b_2(IVirtualPathProviderModule p)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__16`2.MoveNext()
at EPiServer.Web.Hosting.VirtualPathRegistrationHandler.RegisterVirtualPathProvidersFromCode(InitializationEngine context)
at EPiServer.Web.Hosting.VirtualPathRegistrationHandler.RegisterVirtualPathProviders(InitializationEngine context, ProviderSettingsCollection settings)
at EPiServer.Framework.FrameworkInitialization.RegisterVirtualPathProviders(InitializationEngine context)
at EPiServer.Framework.FrameworkInitialization.Initialize(InitializationEngine context)
at EPiServer.Framework.Initialization.Internal.ModuleNode.<>c_DisplayClass3_0.<Initialize>b_0()
at EPiServer.Framework.Initialization.Internal.ModuleNode.Execute(Action a, String key)
at EPiServer.Framework.Initialization.Internal.ModuleNode.Initialize(InitializationEngine context)
at EPiServer.Framework.Initialization.InitializationEngine.InitializeModules()
System.Configuration.ConfigurationErrorsException: Unrecognized attribute 'regex'. Note that attribute names are case-sensitive. (F:\Visual Studio 2015\Projects\cms10b\cms10b\web.config line 274)
at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult)
at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at EPiServer.Framework.Configuration.FileConfigurationSource.Get[T](String path)
at EPiServer.Configuration.EPiServerSection.EnsureCurrentConfig()
at EPiServer.Configuration.EPiServerSection.get_Instance()
at EPiServer.Configuration.Settings.get_Instance()
at EPiServer.UriSupport.get_InternalUtilUrl()
at EPiServer.Cms.Shell.VppInitializer.CreateProviders(InitializationEngine context)
at EPiServer.Web.Hosting.VirtualPathRegistrationHandler.<>c_DisplayClass8_0.<RegisterVirtualPathProvidersFromCode>b_2(IVirtualPathProviderModule p)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__16`2.MoveNext()
at EPiServer.Web.Hosting.VirtualPathRegistrationHandler.RegisterVirtualPathProvidersFromCode(InitializationEngine context)
at EPiServer.Web.Hosting.VirtualPathRegistrationHandler.RegisterVirtualPathProviders(InitializationEngine context, ProviderSettingsCollection settings)
at EPiServer.Framework.FrameworkInitialization.RegisterVirtualPathProviders(InitializationEngine context)
at EPiServer.Framework.FrameworkInitialization.Initialize(InitializationEngine context)
at EPiServer.Framework.Initialization.Internal.ModuleNode.<>c_DisplayClass3_0.<Initialize>b_0()
at EPiServer.Framework.Initialization.Internal.ModuleNode.Execute(Action a, String key)
at EPiServer.Framework.Initialization.Internal.ModuleNode.Initialize(InitializationEngine context)
at EPiServer.Framework.Initialization.InitializationEngine.InitializeModules()

Workaround:
Change back the configuration from
<linkValidator externalLinkErrorThreshold="100" recheckInterval="7.00:00:00">
<excludePatterns regex=".*doc" />
</linkValidator>
to
<linkValidator externalLinkErrorThreshold="100" recheckInterval="7.00:00:00">
<excludePatterns>
<add regex=".*doc"/>
</excludePatterns>
</linkValidator>