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}");