繁体   English   中英

ASP.NET MVC路由:类似于子文件夹的路由

[英]ASP.NET MVC Routing: subfolder-like route

这是我的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" }
        );
    }

当我使用Web浏览器访问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" }
        );
    }

为了调用普通的控制器动作,您必须像这样注册您已经完成的路由:

    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 }
        );
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM