Festlegen eines alternativen Controller Ordner in ASP.NET MVC
-
09-10-2019 - |
Frage
Wir können einen MVC-app, dass Anwendungen die Standardordner Konventionen für die HTML-Ansichten, aber wir möchten, dass alternative „Service“ Ordner einzurichten mit Controllern nur für verwendeten Web-Service xml oder json zurück.
So die Route "/ Dienstleistungen / Aufgaben / List" würde zu "/Services/TaskService.cs" geleitet werden, während "/ Aufgaben / List" auf den Standard geführt werden würden „/Controllers/TaskController.cs"
Wir möchten den Service Controller der View-Controller getrennt halten. Wir glauben nicht, Bereiche oder mit einem anderen Projekt arbeiten. Was wäre der beste Weg, um diesen Ansatz?
Lösung
Sie können diese mithilfe von Routing tun, und die Controller in separatem Namensraum zu halten. MapRoute können Sie die Namespace entspricht einer Route angeben.
Beispiel:
Vor diesem Controller
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");
}
}
}
Und die folgende Routing
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
);
Sie sollten die folgenden Antworten erwarten
/ Services / Home
Servicecontroller
/ Home
Controller
Andere Tipps
Sie wollen eine eigene Controller-Fabrik Umsetzung IControllerFactory erstellen.
Schauen Sie sich http://nayyeri.net/custom-controller- Fabrik-in-asp-net-mvc für ein Beispiel.
Wenn Sie gelbe Ordnernamen sehen Fügen Sie den Namen des Ordners in root
Nachdem haben Sie routes.MapRoute in "App_Start> RouteConfig"
ändernÄndern Standardroute
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "mvcPartialView.HomeController" } // Namespace
);
und Fügen Sie diese
routes.MapRoute(
"ApiControllerOne", // Name of folder
"ApiControllerOne/{controller}/{action}/{id}",
new { controller = "ApiFactory", action = "callFactoryOne", id = UrlParameter.Optional },
new string[] { "mvcPartialView.ApiControllerOne" } // Namespace
);