Таким образом, мое приложение растет, и я хотел бы отделить мои контроллеры на основе View от моих контроллеров на основе JSON. По сути, у меня есть несколько контроллеров, которые все, что они делают, возвращают результаты JSON для вызовов AJAX.
То, что я хотел бы сделать, это настроить маршруты (и, соответственно, структуру папок в папке «Мои контроллеры») так, чтобы мои контроллеры JSON находились в / RPC /, а мои обычные контроллеры - в / - т.е. мой JavaScript будет вызывать / RPC / SomeController / SomeAction, а мои обычные страницы будут находиться в /SomeOtherController/SomeOtherAction.
Итак, я настроил папку Controllers следующим образом:
- Контроллеры (папка)
- RPC (папка)
- JsonController1
- JsonController2
- ViewController1 1018 *
- ViewContoller2
- ViewController3
Я не смог просто зайти в / RPC / JsonController1 / Index и получить эту работу, поэтому я настроил свои маршруты следующим образом:
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.