我需要创建一个Sitecore包补丁文件,以便将字符串添加到web.config中IgnoreUrlPrefixes
设置的现有值属性中。
我试图使用以下包含文件完全覆盖默认的忽略前缀:
<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<settings>
<setting name="IgnoreUrlPrefixes">
<patch:attribute name="value">/foo/|/sitecore/default.aspx|/trace.axd|/webresource.axd|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.DialogHandler.aspx|/sitecore/shell/applications/content manager/telerik.web.ui.dialoghandler.aspx|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.SpellCheckHandler.axd|/Telerik.Web.UI.WebResource.axd|/sitecore/admin/upgrade/|/layouts/testing</patch:attribute>
</setting>
</settings>
</sitecore>
</configuration>
</settings>
其中/foo/
是我要添加到默认前缀的url前缀。 ShowConfig.aspx
表示尚未应用修改后的配置。
理想情况下,我希望能够将/foo/
简单地添加到存在的任何值作为默认IgnoreUrlPrefixes
值。有谁知道这是否可行以及如何在Sitecore补丁语法中指定它?
答案 0 :(得分:12)
Sitecore 的所有可能性的良好解释包括配置文件,可在此John West blog post中找到。
您可以在链接的帖子中找到:
patch:attribute: Define or replace the specified attribute.
它不允许“将/foo/
添加到默认的IgnoreUrlPrefixes
”属性中。
答案 1 :(得分:3)
我最近遇到了同样的问题,似乎Mark Ursino在这个特定问题上发布了一个博客:
http://firebreaksice.com/sitecore-patchable-ignore-lists/
在他的示例中,他在默认的Sitecore之后执行自定义管道以更新值。
相反,我创建了一个新的管道处理器 内置的(它将支持现有的本机IgnoreUrlPrefixes 设置)并允许您通过自己的XML配置添加每个路径 节点。这里的优点是你可以修补并继续修补 无需复制现有值。
示例补丁文件:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<httpRequestBegin>
<processor type="Sitecore.PatchableIgnoreList.ProcessPatchedIgnores, Sitecore.PatchableIgnoreList"
patch:after="processor[@type='Sitecore.Pipelines.HttpRequest.IgnoreList, Sitecore.Kernel']">
<Paths hint="list:AddPaths">
<foo>/foo</foo>
<bar>/bar</bar>
</Paths>
</processor>
</httpRequestBegin>
</pipelines>
</sitecore>
</configuration>
管道处理器的源代码,来自博客:
using Sitecore.Collections;
using Sitecore.Pipelines.HttpRequest;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Sitecore.PatchableIgnoreList
{
public class ProcessPatchedIgnores : HttpRequestProcessor
{
private List<string> _paths = new List<string>();
public override void Process(HttpRequestArgs args)
{
string filePath = args.Url.FilePath;
foreach (string path in _paths)
{
if (filePath.StartsWith(path, StringComparison.OrdinalIgnoreCase))
{
args.AbortPipeline();
return;
}
}
}
public void AddPaths(string path)
{
if (!string.IsNullOrEmpty(path) && !_paths.Contains(path))
{
_paths.Add(path);
}
}
}
}