MVC为移动控制器配置路由

时间:2014-10-21 12:21:21

标签: c# asp.net asp.net-mvc-4 .net-4.0

在我的MVC 4网页应用程序中,如果我访问主页,请调用以下网址:

网站名称/家庭

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

网站名称/移动/家庭

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


}

2 个答案:

答案 0 :(得分:3)

ASP.NET MVC路由依赖于顺序,应该按照大多数通用的顺序排列。

目前,如果您输入网址Mobile/Home/Index,路由会尝试将其映射到:

  • controller:Mobile
  • 行动:主页
  • id:索引

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

如果您交换MapRoute声明,那么MVC会看到它以" Mobile"并按预期使用该路线。

答案 1 :(得分:-1)

@dav_i 100%正确,因为路线需要在另一条路线之前。移动网址在网址中包含移动设备,因此您必须在任何操作链接或重定向中使用移动设备...理想情况下,在您的global.asax中,您尝试检测浏览器是否为移动设备,以及在那里重定向...但你仍然需要在URL中管理Mobile。这是因为Url.Action和Html.ActionLink等函数希望控制器和操作成为完整的URL,并且:

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

产生

/Control/Action

因此,你必须处理这个问题。或者,您可以使用移动视图而不必担心这一点。请参阅this tutorial