【问题标题】:asp.net mvc url routingasp.net mvc url路由
【发布时间】:2010-11-22 19:39:07
【问题描述】:

如何映射 domain.com/username 之类的内容?问题是我认为 MVC 路由寻找控制器来确定它应该如何处理映射请求。

我对 ASP.NET MVC 还是很陌生。

但是,根据目前的教程,路由机制似乎相当僵化。

【问题讨论】:

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


    【解决方案1】:

    它实际上非常灵活,我想你会发现它非常强大,需要更多的经验。以下是您可以做您想做的事的方法:

    routes.MapRoute("MyRoute", 
                     "{username}", 
                     new { controller = "Home", action = "Index", username = "" });
    

    这会选择一个默认控制器(“Home”)和一个默认操作方法(“Index”),并传递一个用户名参数(默认设置为“”)。

    但请小心使用此路由,因为它几乎可以匹配您可以想象的任何 URL。它应该是您添加到映射中的最后一条路由,因此您的其他路由有机会首先访问该 URL。

    【讨论】:

      【解决方案2】:

      添加到 womp - 我会走这条路(双关语):

      routes.MapRoute("MyRoute", 
                       "user/{username}", 
                       new { controller = "User", action = "Index", username = "" });
      

      这会将网址映射到:domain.com/user/{username}

      您可以随时将控制器和操作更改为您想要的任何内容。

      【讨论】:

        【解决方案3】:
          routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        
                    routes.MapRoute("MyRoute",
                      "{id}",
                      new { controller = "Home", action = "User", id = "" });
        
        
                    routes.MapRoute(
                      "Default",                                              // Route name
                      "{controller}/{action}/{id}",                           // URL with parameters
                      new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
                  );
        

        如果我有类似的东西,那么我可以指向 mydomain.com/userid 以及 mydomain.com/home/index/1 之类的东西。但是,如果我只是访问 mydomain.com,它会转到用于 userid 的页面,这是有道理的,因为它与第一个路由规则匹配并认为 id 是“”,但是我该如何阻止这种行为呢?

        【讨论】:

        • 路由的顺序是它们被检查的顺序。所以最不重要的应该放在最后。那就是所谓的MyRoute。将其移至默认路线下方。
        猜你喜欢
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 2014-04-23
        相关资源
        最近更新 更多