Sitecore 8 MVC ajax вызов маршрут регистрации

Я пришел с проблемой, вызванной плохой документацией sitecore и моим небольшим опытом.

Случай: у меня есть проект sitecore, который я не создал, но мне пришлось его развивать. Ничего сложного, несколько визуализаций - основные вещи

Проблема: мне нужно добавить 3 пользовательских маршрута, чтобы использовать их с некоторыми вызовами ajax. У меня есть файл routeconfig.cs, и я добавил эти маршруты здесь, но похоже, что это не выполняется, потому что нигде нет глобального класса.

Итак, потому что я прочитал, что я должен использовать эти конвейеры, но я не совсем понимаю, как использовать тот, который выполняется только один раз, когда приложение запускается

У меня есть один разработанный кем-то еще, который обрабатывает 404, но этот выполняется по каждому запросу. Я не хочу проверять, существует ли маршрут, и зарегистрировать его в этом процессе.

Есть ли другой путь?

Вот как это работает сейчас:

namespace SS.Configuration.Pipelines
{
    public class Custom404ResolverPipeline : HttpRequestProcessor
    {
        public override void Process(HttpRequestArgs args)
        {
            Assert.ArgumentNotNull(args, "args");

            if (RouteTable.Routes["AjaxCall"] == null) RouteConfig.RegisterRoutes(RouteTable.Routes);

            //do some other stuff

2 ответа

Вы должны зарегистрировать свои маршруты в initialize конвейер, чтобы они регистрировались только один раз при запуске приложения: как зарегистрировать пользовательские маршруты ASP.NET MVC в Sitecore

Пример из связанной статьи:

Создайте пользовательский процессор для конвейера инициализации и определите пользовательский маршрут в методе Process, как показано ниже:

public class RegisterCustomRoute
{
  public virtual void Process(PipelineArgs args)
  {
    RouteTable.Routes.MapRoute("CustomRoute", "some/route/{controller}/{action}/{id}");
  }
}

Добавьте этот процессор в конвейер инициализации прямо перед процессором Sitecore InitializeRoutes. Вы можете сделать это с помощью файла патча конфигурации следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <initialize>
        <processor type="MyNamespace.RegisterCustomRoute, MyAssembly"  patch:before="processor[@type='Sitecore.Mvc.Pipelines.Loader.InitializeRoutes, Sitecore.Mvc']" />
      </initialize>‌
    </pipelines>
  </sitecore>
</configuration>

Если вы не хотите идти по конвейеру, вы также можете загрузить пакет веб-активатора из Nuget, а затем реализовать своего рода класс запуска для регистрации ваших маршрутов.

[assembly: PostApplicationStartMethod(typeof(SomeNameSpace.StartUp), "Start")]

namespace SomeNameSpace
{

public static class StartUp
{
    public static void Start()
    {

        MvcHandler.DisableMvcResponseHeader = true;
        RouteConfig.RegisterRoutes(RouteTable.Routes);
     }
 }
}

и в вашем методе Зарегистрировать маршруты класса RouteConfig вы можете отобразить свой маршрут, как показано ниже

RouteTable.Routes.MapRoute("CustomRoute", "some/route/{controller}/{action}/{id}");
Другие вопросы по тегам