La définition d'un autre emplacement du dossier de contrôleur dans ASP.NET MVC
-
09-10-2019 - |
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?
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
);