0

J'essaie de créer des routes MVC personnalisées pour mon application sitecore. Je regardais ce lien à SO Here. Alors que j'ai fait la configuration - je ne comprends pas comment lier l'itinéraire à mon contrôleur car mon contrôleur n'a pas le nom "contrôleur" et il ne fait pas partie du dossier du contrôleur. Je la configuration suivanteSitecore MVC Route Configurer

Ma "classe Controller"

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

Mon configuration de routage

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

    } 

Mon Autofac injection de dépendances

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

Enfin mon Pipeline:

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

Ce que je ne comprends pas est
Quand je fais un appel angulaire

mysite.com/api/userapi/login

Comment sera-t acheminer l'appel à mon Classe Userapi?

i obtenir ce type de contrôleur est nul en Autofac usine contrôleur
Qu'est-ce que je suis absent.

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

Répondre

1

assurez-vous que RegisterRoutes est appelée, vous pouvez vérifier que par le débogage, également dans votre code, je ne vois pas que vous utilisez le contrôleur de compte, voici ma réponse en supposant UserApi est le contrôleur.

dans Sitecore si vous voulez faire appel ajax pour l'action MVC, vous devez faire comme ça dans le tableau de route registre:

MVC:

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

et votre appel sera comme ceci:

mysite.com/userapi/login 

si vous voulez utiliser WebAPI, vous pouvez utiliser la même route que vous avez, mais vous devrez peut-être changer « api » à quelque chose diff érents "MyApi" et votre classe doit être dérivée de ApiController:

WebAPI:

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

et route registre:

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

et votre appel sera comme ceci:

mysite.com/myapi/userapi/login 
+0

Merci @ Ayman-barhoum. J'ai essayé ça. Autofac interfère et j'ai toujours Controllertype comme nul. J'ai mis à jour la partie autofact du code. –