2013-05-25 1 views
8

web.config의 IgnoreUrlPrefixes 설정의 기존 값 특성에 문자열을 추가하려면 Sitecore 포함 패치 파일을 만들어야합니다.Sitecore 포함 파일을 사용하여 특성 값을 패치하는 방법

나는 다음과 같은 전적으로 기본 무시 접두사를 덮어 쓰기를 시도 파일이 포함 /foo/ 내가 기본 접두사에 추가 할 URL 접두사입니다

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

. ShowConfig.aspx은 수정 된 구성이 적용되지 않았 음을 나타냅니다.

이상적으로 기본값 IgnoreUrlPrefixes 값으로 존재하는 것에 /foo/을 간단하게 추가 할 수 있습니다. 아무도 이것이 가능한 경우 Sitecore 패치 구문에서 지정하는 방법을 알고 있습니까?

답변

12

Sitecore 포함 설정 파일에 대한 좋은 설명은 John West blog post에서 찾을 수 있습니다.

링크 된 게시물에서 찾을 수 있듯이 :

patch:attribute: Define or replace the specified attribute. 

그것은 속성의 "기본 IgnoreUrlPrefixes로 존재 무엇에 /foo/를 추가"하는 것을 허용하지 않습니다.

+2

감사 마라 너무 빨리 것을 확인합니다. 원본 파일에서 오타가 발생하여로드가 중단되었습니다. 필자는 파일을 읽는 사람이라면 좀 더 직관적이므로'set : value' 구문을 사용하는 것으로 끝났습니다. –

+1

불행히도 링크가 죽었습니다. – Liam

2

나는 최근이 같은 문제에 달려 마크 Ursino이 특정 문제에 대한 블로그를 게시 것 같다 : 자신의 예에서

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

, 그는 업데이트 할 수있는 기본 Sitecore 한 후 사용자 지정 파이프 라인을 실행 가치.

그래서 대신에, 나는 가 내장 된 후 1 (기존 원시 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); 
      } 
     } 
    } 
} 
+0

업데이트 및 코드 스 니펫을 보내 주셔서 감사합니다. 이러한 종류의 작업을 처리하기 위해 파이프 라인 프로세서를 과도하게 사용하는 것에 대한 예약이 있습니다. 내 마음에 그들은 모든 경우에 올바른 해결책이 아닐지라도 모든 문제를 해결하는 우리의 황금 망치가되었습니다. 예를 들어 구성 패치 프로세서는'httpRequestBegin' 파이프 라인에서 실행 중입니다. 이것은 많이 불려질 것이며, 대부분의 경우 파이프 라인 프로세서는 요청이 이루어진 것과 관련이 없습니다. 생각을 듣고 싶습니다. –

+0

기존 Ignore 처리기를 살펴보면 httpRequestBegin 파이프 라인에서도 실행된다는 것을 알 수 있습니다. 따라서이 특정 시나리오에서는 기존 아키텍처와 일치합니다. 구성 팩토리는 초기화 중에 구성을로드 할 때만 "AddPaths"를 호출하므로 요청 처리 중에는 현재 요청을 무시해야하는지 확인하는 중입니다. 이 시점에서이 검사를 실행하지 않으면 파이프 라인을 중단 할 수 없으며 전체 목적이 파이프 라인을 중지하는 것이지만 파이프 라인이 실행됩니다. –

+0

이 솔루션의 실제 문제는 원래 목록을 업데이트 할 수 없다는 것입니다. 단지 자신의 "추가"목록 만 생성한다는 것입니다. Sitecore는 무시 된 URL 목록에 공개적으로 접근하지 못했기 때문에 Sitecore의 프로세서에서 이미 사용 된 목록을 실제로 변경할 수 없습니다. 그게 최선의 방법이 될거야 ... –