2011-12-23 53 views
5

我有一个默认的C#MVC路线:像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 

但我想有第一套具有较短网址,如:

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 “短/”。 我可以解决这个问题:

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

但后来我需要手动添加每个新页......

+0

http://stackoverflow.com/questions/2975642/routing-in-asp-net-mvc-2-0 – CodeCaster 2011-12-23 09:55:38

回答

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

    } 

确保您的默认之前将其添加到路由(或者,如果你想即使删除默认)

,而是这些被添加的顺序很重要。

有一点信息丢失,并且控制器中的Action。

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

希望这会有所帮助。

问候。

+0

有了这个应用程序忘记了之后添加的默认路由器,因为他无法区分这两条路线。这一个工程:routes.MapRoute(“短”,“短/ {id}”,新{控制器=“家”,动作=“信息”,ID =“Leermethode”});但后来我在网址中出现了丑陋的“短”。 – Paul 2011-12-23 11:44:22

+0

所以我玩了一下,尝试以下内容 – Sitnam 2011-12-28 12:19:52

+0

因此,一旦你的页面路径和动作全部排序完毕,你可以做的就是从数据库中添加你的内容,或者如果它们是硬编码的项目,可能使用偏分量。希望这有助于多一点:$ – Sitnam 2011-12-28 12:50:59