【问题标题】:How can I make my routes that start with /home always direct to the home controller and index action?如何使以 /home 开头的路由始终指向主控制器和索引操作?
【发布时间】:2013-06-14 08:06:49
【问题描述】:

我有以下路线:

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

这工作正常,并指向用户输入 /home 的主控制器索引操作

如果用户输入,我是否可以始终将其直接指向索引操作:

/home/xxx 或 /home/xxx/xxx

xxx 可以是什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


    【解决方案1】:

    当然,只需从路由定义中删除 {action} 部分,以便操作始终为 Index

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

    【讨论】:

    • 这是否适用于 /home/xx 和 /home/xx/xx 的两种组合?
    • 是的,它会起作用的。 {id} 路由标记在此路由中是可选的。
    【解决方案2】:

    如果您从 url 中删除 {action} 并将其保留为默认值,那么它应该可以正常工作。

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

    在这种情况下,动作总是索引...

    【讨论】:

      【解决方案3】:

      试试这个来捕捉所有可能的路线:

      routes.MapRoute(
          "Default",
          "home/{*url}",
          new { controller = "Home", action = "Index", id = UrlParameter.Optional } }
      );
      

      【讨论】:

      • 这也会捕获 /home/x/x/x 吗?
      • 它应该,但你最好再次测试它。我暂时没有这个可能
      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多