2013-05-25 10 views
8

Ich muss eine Sitecore-Include-Patch-Datei erstellen, um dem vorhandenen Wertattribut der Einstellung IgnoreUrlPrefixes in der Datei web.config eine Zeichenfolge hinzuzufügen.So patchen Sie einen Attributwert mit einer Sitecore-Include-Datei

Ich habe versucht, den Standard ignorierte Präfixe vollständig mit dem folgende Überschreiben Include-Datei:

<?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> 

Wo /foo/ der URL-Präfix ist, dass ich auf den Standard Präfixe hinzufügen möchte. ShowConfig.aspx zeigt an, dass die geänderte Konfiguration nicht angewendet wurde.

Idealerweise würde ich gern /foo/ zu dem hinzufügen können, was als Standardwerte IgnoreUrlPrefixes existiert. Weiß jemand, ob dies möglich ist und wie es in der Sitecore-Patch-Syntax angegeben wird?

Antwort

12

Gute Erklärung aller Möglichkeiten von Sitecore Include-Config-Dateien finden Sie in diesem John West blog post.

Wie Sie im verlinkten Beitrag finden:

patch:attribute: Define or replace the specified attribute. 

Es darf nicht zu „add /foo/, was auch immer existiert als Standard IgnoreUrlPrefixes“ Attribut.

+2

Dank Maras für das so schnell bestätigt. Ich hatte einen Tippfehler in meiner Originaldatei, der das Laden verhindert hat. Ich habe am Ende die 'set: value' Syntax verwendet, da es für jeden, der die Datei liest, etwas intuitiver ist. –

+1

Das verlinkt jetzt leider – Liam

2

ich vor kurzem in das gleiche Problem lief und es scheint, wie Mark Ursino ein Blog zu diesem speziellen Thema geschrieben:

http://firebreaksice.com/sitecore-patchable-ignore-lists/

In seinem Beispiel führt er eine benutzerdefinierte Pipeline nach dem Standard-Sitecore ein aktualisieren der Wert.

Anstatt also, ich habe einen neuen Pipeline-Prozessor erstellt, die nach kommt die eingebaute in einem (die von den bestehenden nativen IgnoreUrlPrefixes Einstellung unterstützt) und ermöglicht es Ihnen, jeden Pfad über einen eigenen XML-Konfigurations hinzufügen Knoten. Der Vorteil hier ist, dass Sie Patch patchen und weiter patchen können, ohne die vorhandenen Werte kopieren zu müssen.

Beispiel Patch-Datei:

<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> 

Quellcode für den Pipeline-Prozessor, aus dem Blog:

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); 
      } 
     } 
    } 
} 
+0

Danke für das Update und Code-Snippet. Ich habe eine Reservierung über die Verwendung von Pipeline-Prozessoren für diese Art von Aufgaben. Sie sind für mich zu unserem goldenen Hammer geworden, der alle Probleme behebt und vielleicht nicht immer die richtige Lösung ist. Zum Beispiel läuft der Konfigurationspatch-Prozessor in der Pipeline "httpRequestBegin". Das wird oft aufgerufen, und in den meisten Fällen ist der Pipeline-Prozessor für die Anforderung nicht relevant. Interessiert, deine Gedanken zu hören. –

+0

Wenn Sie sich den vorhandenen Ignore-Handler ansehen, sehen Sie, dass er auch in der httpRequestBegin-Pipeline ausgeführt wird, sodass er zumindest in diesem bestimmten Szenario mit der vorhandenen Architektur übereinstimmt. Ich glaube, die Konfigurationsfactory ruft nur die "AddPaths" auf, wenn sie die Konfiguration während der Initialisierung lädt, also prüft sie während der Anfrageverarbeitung nur, ob die aktuelle Anfrage ignoriert werden sollte. Wenn Sie diese Überprüfung an diesem Punkt nicht ausführen, können Sie die Pipeline nicht abbrechen, und die Pipeline wird ausgeführt, obwohl der gesamte Zweck darin besteht, die Pipeline zu stoppen. –

+0

Mein aktuelles Problem mit dieser Lösung ist, dass es die ursprüngliche Liste nicht aktualisieren kann, es erstellt nur seine eigene "Extra" -Liste. Sitecore scheint keine öffentliche Möglichkeit für den Zugriff auf die Liste der ignorierten URLs eröffnet zu haben, so dass Sie die Liste, die bereits vom Sitecore-Prozessor verwendet wird, nicht ändern können. Das wäre der beste Weg ... –