ASP.NET MVC 4 ApiController和常规控制器路由

Nic*_*sen 4 asp.net-mvc asp.net-mvc-4 asp.net-apicontroller

我有一个仅用于向我们的应用程序发出API请求的项目,而我们正在使用ASP.NET MVC 4项目。我们有一些从ApiController派生的控制器,而另一些从普通Controller类派生的控制器。问题是我不希望ApiControllers的默认路由api/XXXXX/。我希望ApiController与非Api控制器使用相同的路由{controller}/{action}/{id}。我尝试添加以下路线

routes.MapHttpRoute(
    name: "Api",
    routeTemplate: "{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

这样就可以使用常规{controller}/{action}路由访问我的ApiController,但是不再可以访问“常规”控制器。如果我摆脱MapHttpRoute了相反的情况。

是否可以通过相同的url路由访问ApiControllers和“普通”控制器?

Nic*_*sen 6

从我看到的结果来看,唯一的方法是显式命名每个API控制器。下面我有一个SomeApiController类。

routes.MapHttpRoute(
    name: "SomeApiController",
    routeTemplate: "SomeApi/{action}/{id}",
    defaults: new { controller = "SomeApi", id = RouteParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)