【问题标题】:Sitecore MVC Route Set upSitecore MVC 路由设置
【发布时间】:2017-06-29 16:44:05
【问题描述】:

我正在尝试为我的 sitecore 应用程序创建自定义 MVC 路由。我在 SOHere 上查看此链接。 虽然我已经进行了配置 - 我不明白如何将路由链接到我的控制器,因为我的控制器没有名称“控制器”并且它不是控制器文件夹的一部分。 我有以下设置

我的“控制器类”

   namespace project2
{
    public class UserApi : ApiController
    {
       [HttpPost]
        public bool Login(ILogin request)
        {
            //do something
        }
    }
}

我的路由设置

  public class InitRoutes : Sitecore.Mvc.Pipelines.Loader.InitializeRoutes
    {
        public override void Process(PipelineArgs args)
        {
            RegisterRoutes(RouteTable.Routes);
        }
        protected virtual void RegisterRoutes(RouteCollection routes)
        {
            routes.MapRoute(
                "Accounts",
                "authapi/{controller}/{action}/{id}",
                new { id = UrlParameter.Optional }
                );
        }

    }

我的 Autofac 依赖注入

   AutofacContainerFactory.ContainerBuilder.RegisterType<UserApi>().As<UserApi>().SingleInstance();

最后是我的管道:

<processor type="Project2.InitRoutes, Project2"
         patch:after="processor[@type='Sitecore.Mvc.Pipelines.Loader.InitializeRoutes, Sitecore.Mvc']" />

我不明白的是
当我从角度拨打电话时

mysite.com/api/userapi/login

它将如何将调用路由到我的 Userapi 类?

我知道 Autofac 控制器工厂中的 控制器类型为 null
我错过了什么。

 public class AutofacControllerFactory : DefaultControllerFactory
    {
           protected override IController GetControllerInstance(RequestContext context, Type controllerType)
        {
           IController controller = (IController) DependencyResolver.Current.GetService(controllerType);
          return controller 
        }
 }

【问题讨论】:

    标签: model-view-controller routes angular-ui-router sitecore autofac


    【解决方案1】:

    首先确保正在调用 RegisterRoutes,您可以通过调试来检查,同样在您的代码中我看不到您正在使用帐户控制器,这里我的回答是假设 UserApi 是控制器。

    如果您想在 Sitecore 中为 MVC 操作进行 ajax 调用,您必须在注册路由表中这样做:

    MVC:

    RouteTable.Routes.MapRoute("UserApi", "UserApi/Login", new { controller = "UserApi", action = "Login" });
    

    你的电话会是这样的:

    mysite.com/userapi/login
    

    如果您想使用 WebAPI,您可以使用与您相同的路由,但您可能需要将“api”更改为不同的“myapi”,并且您的类应该从 ApiController 派生:

    WebAPI:

    public class UserApi:ApiController
    {
     public bool Login(ILogin request)
        {
            //do something
        }
    }
    

    并在注册路线中:

      routes.MapRoute(
                        "UserAPI",
                        "myapi/{controller}/{action}/{id}",
                        new { id = UrlParameter.Optional }
                        );
    

    你的电话会是这样的:

    mysite.com/myapi/userapi/login
    

    【讨论】:

    • 谢谢@Ayman-barhoum。我试过这个。 Autofac 干扰,我总是得到 Controllertype 为空。我已经更新了代码的自动事实部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2015-01-24
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多