Question

Nous pouvons une application MVC qui utilise les conventions de dossier par défaut pour les vues HTML, mais nous aimerions mettre en place autre dossier « Services » avec les contrôleurs utilisés que pour les services Web retour xml ou JSON.

la route « / Services / Tâches / Liste » sera acheminé vers « /Services/TaskService.cs », tandis que « / tâches / liste » seraient acheminés à la norme « /Controllers/TaskController.cs"

Nous aimerions garder les contrôleurs service distinct des contrôleurs de vue. Nous ne pensons pas que les zones ou en utilisant un autre projet fonctionnera. Quelle serait la meilleure façon d'aborder ce sujet?

Était-ce utile?

La solution

Vous pouvez le faire en utilisant le routage, et de garder les contrôleurs espaces de noms distincts. MapRoute vous permet de spécifier quel espace correspond à un itinéraire.

Exemple

Compte tenu de ce contrôleur

namespace CustomControllerFactory.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
           return new ContentResult("Controllers");
        }
    }
}

namespace CustomControllerFactory.ServiceControllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
           return new ContentResult("ServiceControllers");
        }
    }
}

Et le routage suivant

 routes.MapRoute(
           "Services",
           "Services/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "CustomControllerFactory.ServiceControllers" } // Namespace
        );


        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "CustomControllerFactory.Controllers"} // Namespace
        );

Vous devez vous attendre les réponses suivantes

/ Services / Accueil

  
    

ServiceController

  

/ Home

  
    

Contrôleurs

  

Autres conseils

Vous aurez envie de créer votre propre usine de contrôleur IControllerFactory mise en œuvre.

Consultez http://nayyeri.net/custom-controller- usine en asp-net-mvc pour un exemple.

Si vous voyez les noms de dossier jaune Ajouter un dossier Nom dans la racine

Après, vous devez modifier routes.MapRoute dans "App_Start> RouteConfig"

Modifier l'itinéraire par défaut

routes.MapRoute(
          "Default",
          "{controller}/{action}/{id}",
          new { controller = "Home", action = "Index", id =     UrlParameter.Optional },
          new string[] { "mvcPartialView.HomeController" } // Namespace 
      );

Ajouter cette

routes.MapRoute(
       "ApiControllerOne", // Name of folder
       "ApiControllerOne/{controller}/{action}/{id}",
        new { controller = "ApiFactory", action = "callFactoryOne", id = UrlParameter.Optional },
        new string[] { "mvcPartialView.ApiControllerOne" } // Namespace
    );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top