0

我想为我的sitecore应用程序创建自定义MVC路由。我正在查看SO Here的链接。 虽然我做了配置 - 我不明白如何将路由链接到我的控制器,因为我的控制器没有名称“控制器”,它不是控制器文件夹的一部分。 我有以下设置Sitecore MVC路由设置

我的 “控制器类”

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类?

我明白了控制器类型为空 in Autofac Controller factory
我在想什么。

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

回答

1

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

在Sitecore的,如果你想使AJAX调用MVC的行动,你必须注册路由表来这样做:

MVC:

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

和您的通话将像这样的:

mysite.com/userapi/login 

,如果你想使用的WebAPI,您可以使用您有相同的路线,但您可能需要更改“API”的东西差异erent “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 
+0

谢谢@ Ayman-barhoum。我试过这个。 Autofac干扰,我总是得到Controllertype为空。我已经更新了代码的autofact部分。 –