【问题标题】:ASP.NET MVC Routing: subfolder-like routeASP.NET MVC 路由:类似子文件夹的路由
【发布时间】: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" }
        );
    }

【问题讨论】:

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing maproute


【解决方案1】:

要调用正常的控制器操作,您必须像这样注册您已经完成的路由:

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "ViewRoute",
        url: "{controller}/{action}/",
        namespaces: new[] { "MyProject.Controllers.ViewsControllers" }
    );

对于调用 api 控制器,请在您的路由类中定义以下方法,并在您的 global.asax Application_Start() 方法中注册此方法:

    public static void RegisterAPI(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2010-10-19
    • 2016-03-02
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多