所以我的應用程序在不斷增長,我想從基於JSON的控制器中分離出基於View的控制器。基本上,我有一堆控制器,他們所做的就是返回AJAX調用的JSON結果。ASP.NET MVC 2:應用領域和路線
我想要做的就是設置路由(以及我的Controllers文件夾下的文件夾結構),以便我的JSON控制器位於/ RPC /下,並且我的常規控制器位於/即我的JavaScript會調用/ RPC/SomeController/SomeAction,而我的常規頁面將位於/ SomeOtherController/SomeOtherAction下。
所以我所做的就是我建立了我的控制器的文件夾中,例如:
- 控制器(文件夾)
- RPC(文件夾)
- JsonController1
- JsonController2
- ViewC ontroller1
- ViewContoller2
- ViewController3
- RPC(文件夾)
我不能只是去/ RPC/JsonController1 /指數,並有工作,所以後來我建立了我的路線如下:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
// Register new annotations.
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(UniqueUsernameAttribute), typeof(UniqueUsernameValidator));
}
public static void RegisterRoutes(RouteCollection routes)
{
// Add the combres routes, too
routes.AddCombresRoute("Combres");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("RPC",
"RPC/{controller}/{action}/{id}",
new { controller = "None", action = "Index", id = UrlParameter.Optional },
new[] { "Backplane.Web.Controllers.RPC" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new[] { "Backplane.Web.Controllers" }
);
}
這工作太棒了!我的控制器可以在/ RPC /和/下訪問。不幸的是我可以有效地訪問/ RPC/ViewController1 /並且我也可以有效地訪問/ JsonController1 /。
看來,我對路由有一個基本的誤解,以及它如何與文件系統上的物理路徑相關。我需要一個自定義路線方案嗎?我想將所有這些保存在同一個項目中,因爲我希望將所有控制器都保存在同一個DLL中。