所以我的应用程序在不断增长,我想从基于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中。