2016-03-17 3 views
2

Я хочу реализовать дополнительные глобальные фильтры в приложении Sitecore 8 MVC. Похоже, мне нужно переопределить стандартный Sitecore InitializeGlobalFilters. Но отсутствие документации заставляет меня нервничать. Я что-то сломаю, переопределив это?Sitecore и MVC Filters

ответ

0

Решено путем перекрытия трубопровода Sitecore.

Во-первых, создан новый трубопровод:

[UsedImplicitly] 
public class InitializeGlobalFilters 
{ 
    public virtual void Process(PipelineArgs args) 
    { 
     this.AddGlobalFilters(args); 
    } 

    protected virtual void AddGlobalFilters(PipelineArgs args) 
    { 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     GlobalFilters.Filters.Add(this.CreateRequestFilter()); 
    } 

    protected virtual object CreateRequestFilter() 
    { 
     return (object)new PipelineBasedRequestFilter(); 
    } 
} 

Затем добавить патч конфигурации, который вставляется это в нужном месте в трубопроводе (имитируя где Sitecore было это:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
<sitecore> 
<pipelines> 
    <initialize> 
    <processor type="Sitecore.Mvc.Pipelines.Loader.InitializeGlobalFilters, Sitecore.Mvc"> 
     <patch:attribute name="type">DD.Platform.Sc.Pipelines.MvcPipelines.InitializeGlobalFilters, DD.Platform.Sc</patch:attribute> 
    </processor>   
    </initialize> 
</pipelines> 
</sitecore> 
</configuration> 
0

Мы использовали в одном проекте фильтры.

В global.asax мы имеем:

protected void Application_Start() 
    {    
     ... 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     ... 
    } 

В папке App_Start мы имеем класс FilterConfig

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 
} 

У нас есть также класс фильтра

public class AllowCrossSiteJsonAttribute : ActionFilterAttribute 
{ 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     .... 
     base.OnActionExecuting(filterContext); 
    } 
} 

и все работает отлично, мы не выполнили проект InitializeGlobalFilters.

+0

Im действительно пытается избежать редактирования файл Global.asax, если это вообще возможно. –

+1

Я просто сделал таблицу маршрутов в Sitecore по той же причине, чтобы не переопределять Global.ascx. Пожалуйста, прочитайте мой блог и посмотрите, может ли это привести вас в правильном направлении. Таблица маршрутов, но я думаю, что переопределения будут похожи. Ht ф: //www.waitingimpatiently.com/moving-controllers-in-to-sitecore/ –