MVC为移动控制器配置路由

本文关键字:配置 路由 控制器 移动 MVC | 更新日期: 2023-09-27 18:27:15

在我的MVC 4 web应用程序中,如果我访问主页,我会调用以下url:

站点名称/主页

现在,我在Controllers文件夹中添加了一个名为Mobile的子文件夹。我如何配置路由,以便能够像这个一样调用移动文件夹中的主控制器

站点名称/移动设备/主页

这是我的RegisterRoutes方法:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "Test.Controllers" }
    );
    routes.MapRoute(
        name: "Mobile",
        url: "Mobile/{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "Test.Controllers.Mobile" }
    );

}

MVC为移动控制器配置路由

ASP.NET MVC路由依赖于顺序,应该按照最特定到最通用的顺序进行。

目前,如果您键入url Mobile/Home/Index,路由将尝试将其映射到:

  • 控制器:移动
  • 操作:主页
  • id:索引

使用默认路线,永远不要到达您想要的路线图。

如果交换MapRoute声明,那么MVC将看到它以"Mobile"开头,并按预期使用该路由。

@dav_i是100%正确的,因为路由需要在另一个路由之前。移动设备的URL中有移动设备,所以你必须在任何操作链接或重定向中都有移动设备。。。因此,理想情况下,在你的global.asax中,你会尝试检测浏览器是否是移动的,并在其中重定向。。。但是,您仍然需要设法在URL中包含Mobile。这是因为像Url.Action和Html.ActionLink这样的函数期望控制器和操作是完整的Url,而这个:

@Url.Action("Action", "Control")

生产:

/Control/Action

因此,你必须处理好这件事。或者,您可以使用移动视图,而不必担心这一点。请参阅本教程。