Это моя файловая структура в моем проекте ASP.NET MVC 4 относительно контроллеров:
|--Models
|--Controllers
|
|--api
| |
| |--UsersController.cs (MyProject.Controllers.API.UsersController.cs)
| |--PlacesController.cs (MyProject.Controllers.API.PlacesController.cs)
|
|--UsersController.cs (MyProject.Controllers.ViewsControllers.UsersController.cs)
|--PlacesController.cs (MyProject.Controllers.ViewsControllers.PlacesController.cs)
Все контроллеры в пространстве имен MyProject.Controllers.API возвращают JsonResult
Все контроллеры в пространстве имен MyProject.Controllers.ViewsControllers возвращают представления
Мой RouteConfig.cs таков:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/",
defaults: new { controller = "Places", action = "List" },
namespaces: new[] { "MyProject.Controllers.ViewsControllers" }
);
}
Когда я иду с веб-браузером к http://localhost/Places/List
, он возвращает представление, как и ожидалось, потому что он использует контроллер MyProject.Controllers.PlacesControlller.cs
Как я могу создать MapRoute для своих json-контроллеров, чтобы при переходе в веб-браузере к http://localhost/api/Places/SomeAction
он использовал класс MyProject.Controllers.API.PlacesController.cs
?
Примечание. Я не хочу использовать функцию API ASP.NET MVC.
Я пробовал это, но это не работает:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "ViewRoute",
url: "{controller}/{action}/",
namespaces: new[] { "MyProject.Controllers.ViewsControllers" }
);
routes.MapRoute(
name: "APIRoute",
url: "api/{controller}/{action}/",
namespaces: new[] { "MyProject.Controllers.API" }
);
}