Asp.net mvc 3 MVC 3路线图

Asp.net mvc 3 MVC 3路线图,asp.net-mvc-3,routing,Asp.net Mvc 3,Routing,在我的映射中映射了2条路线 这是为了允许用户键入带有可选参数的url,以便在网站主页中快速加载其城镇,例如: www.mysite.com/manchester www.mysite.com/liverpool 或者,如果只输入了www.mysite.com而没有其他内容,只需转到defaul主页即可 在处理控制器/动作/参数的默认映射到位后,我添加了一个额外的路由,以便传递参数: routes.MapRoute( "Default", // Route name "{contr

在我的映射中映射了2条路线

这是为了允许用户键入带有可选参数的url,以便在网站主页中快速加载其城镇,例如:

www.mysite.com/manchester www.mysite.com/liverpool

或者,如果只输入了www.mysite.com而没有其他内容,只需转到defaul主页即可

在处理控制器/动作/参数的默认映射到位后,我添加了一个额外的路由,以便传递参数:

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

routes.MapRoute(
    "HomePageQuickFind",
    "{quickFind}",
     new { controller = "Home", action = "Index", quickFind = UrlParameter.Optional });

我不太擅长路由映射,因为我正在努力理解它,我的问题是这是一种糟糕的方法,我的原因是“贪婪路由”,有没有其他方法来实现我的场景?

我认为您需要为每个控制器用一组路由替换默认路由,然后将快速查找路线添加为最后一条路线。这将允许任何不匹配的路由通过快速查找路由。试着这样做:

// Routes for standard controllers
routes.MapRoute(
    "Home",
    "home/{action}/{id}",
    new { controller = "home", action = "index", id = UrlParameter.Optional }
);
routes.MapRoute(
    "Map",
    "map/{action}/{id}",
    new { controller = "map", action = "index", id = UrlParameter.Optional }
);
routes.MapRoute(
    "Default",
    "users/{action}/{id}",
    new { controller = "users", action = "index", id = UrlParameter.Optional }
);

// Route for www.mysite.com/cityname
routes.MapRoute(
    "QuickFind",
    "{quickFind}",
    new { controller = "home", action = "index", quickFind = UrlParameter.Optional }
);