【问题标题】:How to patch an attribute value with a Sitecore Include file如何使用 Sitecore 包含文件修补属性值
【发布时间】:2013-05-25 20:31:46
【问题描述】:

我需要创建一个 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 补丁语法中指定它?

【问题讨论】:

    标签: sitecore sitecore6


    【解决方案1】:

    Sitecore 包含配置文件的所有可能性的良好解释可以在此John West blog post 中找到。

    您可以在链接的帖子中找到:

    patch:attribute: Define or replace the specified attribute.
    

    它不允许“将/foo/ 添加到作为默认IgnoreUrlPrefixes 存在的任何内容中”属性。

    【讨论】:

    • 感谢 Maras 如此迅速地确认。我的原始文件中有一个拼写错误,导致它无法加载。我最终使用了set:value 语法,因为它对于阅读文件的任何人来说都更直观。
    • 不幸的是链接现在死了
    【解决方案2】:

    我最近遇到了同样的问题,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);
                }
            }
        }
    }
    

    【讨论】:

    • 感谢更新和代码 sn-p。对于过度使用管道处理器来处理这类任务,我确实有所保留。在我看来,它们已成为我们的金锤,解决了所有问题,但可能并非在所有情况下都是正确的解决方案。例如,配置补丁处理器在httpRequestBegin 管道中运行。这会被大量调用,并且在大多数情况下,管道处理器与发出的请求无关。有兴趣听听您的想法。
    • 如果你看一下现有的 Ignore 处理程序,你会发现它也在 httpRequestBegin 管道中运行,所以至少在这个特定的场景中,它与现有的架构是一致的。我相信配置工厂仅在初始化期间加载配置时才调用“AddPaths”,因此在请求处理期间它只是检查是否应忽略当前请求。如果此时不运行此检查,则无法中止管道并且管道将执行,即使整个目的是停止管道。
    • 我对这个解决方案的实际问题是它无法更新原始列表,它只是创建了自己的“额外”列表。 Sitecore 似乎没有开放任何公共方式来访问被忽略的 URL 列表,因此您实际上无法更改 Sitecore 处理器已经使用的列表。这将是最好的方式...
    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 2017-07-15
    • 2014-01-17
    • 2021-06-19
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多