asp.net mvc路由与两个控制器或动作名称引用

时间:2018-02-05 12:20:38

标签: asp.net-mvc routes url-routing asp.net-mvc-routing

我不是高级开发人员。我刚开始使用MVC。几天前,我看到了一个ASP.NET MVC路由代码示例,其中引用了两个控制器或操作名称。

routes.MapRoute(
    name: "test",
    url: "{controller}/{action}/{page}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    defaults: new { action = "Index" }
);

刚开始使用ASP.NET MVC,所以我很想知道在路由代码中两次提到控制器或动作名称的目标是什么?

在上面的示例中,有两个默认值....何时以及为什么需要它?

只是要求一个人用一个很好的例子解释同样的事情。

提前致谢。

1 个答案:

答案 0 :(得分:0)

link you posted

中的示例
context.MapRoute(
    "UserHome",
    "User/{id}",
    new { action = "Index", controller = "Home", area = "User", id = 0, 
        httproute = true },
    new { controller = @"Home", id = @"\d+" }
);

有点令人困惑,因为它使用anonymous types而没有named arguments。如果为该示例添加命名参数,它将如下所示:

context.MapRoute(
    name: "UserHome",
    url: "User/{id}",
    defaults: new { action = "Index", controller = "Home", area = "User", id = 0, 
        httproute = true },
    constraints: new { controller = @"Home", id = @"\d+" }
);

这使得这里的内容更加清晰。该示例未显示两组默认值,而是 constraints 限制将匹配的值范围。

基本上说:

  1. controller = @"Home" - 生成网址时,只有controller路由值为Home时才匹配此路由。
  2. id = @"\d+" - 如果id路线值仅包含数字,则匹配。
  3. 实际上,上述两个约束都会针对传入的URL匹配和URL生成运行,但是controller = @"Home"在匹配传入的URL时始终为true,因为默认值是唯一可以设置的值它(默认值也是Home)。