c#MVC路由 - 多条路由

Pau*_*aul 5 c# model-view-controller routes

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

routes.MapRoute(

    "Default",

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

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

);
Run Code Online (Sandbox Code Playgroud)

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

mysite.com/Home/Index/Page1
mysite.com/Home/Index/Page2
mysite.com/Home/Index/Page3
mysite.com/Account/Login
mysite.com/Account/Etc
Run Code Online (Sandbox Code Playgroud)

但是我希望第一组有一个更短的网址,如:

mysite.com/Page1
mysite.com/Page2
mysite.com/Page3
mysite.com/Account/Login
mysite.com/Account/Etc
Run Code Online (Sandbox Code Playgroud)

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

routes.MapRoute(

    "Shorturl",

    "{id}",

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

);

routes.MapRoute(

    "Default",

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

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

);
Run Code Online (Sandbox Code Playgroud)

但这不起作用.它只会采取第一条路线而忘记第二条路线.如果只有一个参数(如mysite.com/Page1),如何使程序采用第一条路径,当有多条路径(如mysite.com/Account/Login)时,如何采用第二条路径?

编辑:我可以这样做:

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

但是我会在网址中看到一个丑陋的"短/".我可以解决它:

routes.MapRoute("Page1", "Page1", new { controller = "Home", action = "Index", id = "Page1" } );
Run Code Online (Sandbox Code Playgroud)

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

Sit*_*nam 3

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

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
        );

    }
Run Code Online (Sandbox Code Playgroud)

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

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

缺少一点信息,即控制器内的操作。

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

希望这可以帮助。

问候。