9

我們可以爲HTML視圖使用默認文件夾約定的MVC應用程序,但是我們希望設置備用「服務」文件夾以及僅用於Web服務的控制器返回xml或json。在ASP.NET MVC中設置備用控制器文件夾位置

因此,「/ Services/Tasks/List」路由將被路由到「/Services/TaskService.cs」,而「/ Tasks/List」將被路由到標準的「/Controllers/TaskController.cs」

我們希望將服務控制器與視圖控制器分開。我們不認爲地區或使用其他項目將工作。什麼是最好的方法來解決這個問題?

回答

9

您可以使用Routing執行此操作,並將控制器保存在不同的名稱空間中。 MapRoute允許您指定哪個名稱空間與路線相對應。

鑑於這種控制器

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

而下面的路由

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

您應該會在下面的響應

/服務/主頁

ServiceController的

/主頁

控制器

+0

你可以做到這一點,並返回一個`ContentResult`或任何非視圖結果,只要記住,如果你決定返回任何類型的視圖,你將需要cre吃了一個自定義視圖引擎。 – Ahmad 2010-12-07 05:24:03

0

如果你看到黃色的文件夾名稱 根添加文件夾名稱

後,您必須修改routes.MapRoute成 「App_Start> RouteConfig」

修改默認路由

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

,並添加這個

routes.MapRoute(
     "ApiControllerOne", // Name of folder 
     "ApiControllerOne/{controller}/{action}/{id}", 
     new { controller = "ApiFactory", action = "callFactoryOne", id = UrlParameter.Optional }, 
     new string[] { "mvcPartialView.ApiControllerOne" } // Namespace 
    ); 
相關問題