【问题标题】:c# MVC routing - multiple routesc# MVC 路由 - 多条路由
【发布时间】:2012-01-26 17:22:01
【问题描述】:

我有一个默认的 c# mvc 路由:

routes.MapRoute(

    "Default",

    "{controller}/{action}/{id}"

    new { controller = "Home", action = "Index", id = "Welcome" }

);

现在我会得到这样的网址:

mysite.com/Home/Index/Page1
mysite.com/Home/Index/Page2
mysite.com/Home/Index/Page3
mysite.com/Account/Login
mysite.com/Account/Etc

但我希望第一组 URL 更短,例如:

mysite.com/Page1
mysite.com/Page2
mysite.com/Page3
mysite.com/Account/Login
mysite.com/Account/Etc

我希望代码非常简单,例如:

routes.MapRoute(

    "Shorturl",

    "{id}",

    new { controller = "Home", action = "Index", id = "Welcome" } 

);

routes.MapRoute(

    "Default",

    "{controller}/{action}/{id}"

    new { controller = "Home", action = "Index", id = "Welcome" }

);

但这不起作用。它只会走第一条路线而忘记第二条路线。 当只有一个参数时(如 mysite.com/Page1) 并在您有多个路线时采用第二条路线(例如 mysite.com/Account/Login)?

编辑: 我能做到:

routes.MapRoute("Short", "short/{id}", new { controller = "Home", action = "Indx", id = "Page1" } );

但是我会在 url 中有一个丑陋的“short/”。 我可以修复它:

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

但是我需要手动添加每个新页面...

【问题讨论】:

标签: c# model-view-controller routes


【解决方案1】:

您可能想尝试这样的事情。

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Short", // Route name
            "{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }

确保将其添加到默认路由之前(如果需要,甚至可以删除默认路由)

但是添加这些的顺序很重要。

缺少一点信息,即控制器中的 Action。

public ActionResult Index(string id)
{
      ViewBag.Message = "Welcome to ASP.NET MVC!"+id;
      return View();
}

希望这会有所帮助。

问候。

【讨论】:

  • 有了这个应用程序忘记了在此之后添加的默认路由器,因为他无法区分这 2 个路由。这个有效: routes.MapRoute("Short", "short/{id}", new { controller = "Home", action = "Info", id = "Leermethode" });但后来我在网址中有丑陋的“短”。
  • 所以我玩了一下这个,试试下面的
  • 因此,一旦您将页面路线和操作全部排序,您可以做的是从数据库中添加内容,或者如果它们是硬编码项目,则可以使用部分内容。希望这会有所帮助:$
  • 把默认放在第一位
猜你喜欢
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多