【发布时间】:2014-10-05 23:30:58
【问题描述】:
这是我在 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 下的控制器都返回 Views
我的 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
如何为我的 json 控制器创建 MapRoute,以便当我使用 Web 浏览器访问 http://localhost/api/Places/SomeAction 时,它使用 MyProject.Controllers.API.PlacesController.cs 类?
注意:我不想使用 ASP.NET MVC 的 api 功能
我试过了,但它不起作用:
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" }
);
}
【问题讨论】:
-
好的,现在我知道发生了什么:如果我将“url: api/...”更改为“url: apix/...”,它会起作用。显然“api”是保留的。
-
最后“api”没有被保留,但已经被用作这个答案:stackoverflow.com/questions/25277926/… - 我不知道关闭这个问题是否会影响我的声誉,但我想离开另一个问题而不是这个问题。
标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing maproute