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部分。 –