Sitecore 8 MVC ajax调用路由寄存器

本文关键字:路由 寄存器 调用 ajax MVC Sitecore | 更新日期: 2023-09-27 18:04:02

我遇到了一个由糟糕的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

Sitecore 8 MVC ajax调用路由寄存器

你应该在initialize管道中注册你的路由,这样它们只在应用程序启动时被注册一次。. 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下载web activator包,然后实现一种启动类来注册你的路由

[assembly: PostApplicationStartMethod(typeof(SomeNameSpace.StartUp), "Start")]
namespace SomeNameSpace
{
public static class StartUp
{
    public static void Start()
    {
        MvcHandler.DisableMvcResponseHeader = true;
        RouteConfig.RegisterRoutes(RouteTable.Routes);
     }
 }
}

,在routecconfig类的Register routes方法中,你可以像下面这样映射你的路由

RouteTable.Routes.MapRoute("CustomRoute", "some/route/{controller}/{action}/{id}");