我的Booking Controller
包含以下代码
public ActionResult Index(string id, string name)
{
return View();
}
我的routeConfig
具有以下路由映射
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Search",
url: "{controller}/{location}/{checkIn}/{checkOut}/{no}",
defaults: new { controller = "Search", action = "Index", location = UrlParameter.Optional, checkIn = UrlParameter.Optional, checkOut = UrlParameter.Optional, no = UrlParameter.Optional }
);
routes.MapRoute(
name: "booking",
url: "{controller}/{action}/{id}/{name}",
defaults: new { controller = "Booking", action = "Index", id = UrlParameter.Optional, name=UrlParameter.Optional }
);}
但是当我访问页面http://localhost:59041/booking/index/1/libin
时,两个参数都返回null
。
答案 0 :(得分:2)
请参阅this本书
随着您的应用程序变得越来越复杂,您可能会这样做 注册多条路线。当你这样做时,重要的是你 考虑您注册它们的顺序。路由时 引擎试图找到匹配的路由,它只是枚举 路线的集合,它一发现就停止列举 匹配。
添加评论如果不是,这可能会导致很多问题 期待它。让我们看看这可能是一个问题的例子:
routes.MapRoute(
> "generic", // Route name
> "{site}", // URL with parameters
> new { controller = "SiteBuilder", action = "Index" } // Parameter defaults );
>
> routes.MapRoute(
> "admin", // Route name
> "Admin", // URL with parameters
> new { controller = "Admin", action = "Index" } // Parameter defaults );
上面的代码段注册了两条路线。第一条路线
包含单个占位符段并设置默认值 SiteBuilder的控制器参数。第二条路线包含一条 单个常量段并设置控制器的默认值 Admin的参数。
这两条路线都完全有效,但是它们的顺序 映射可能会导致意外问题,因为第一个路由 几乎匹配输入的任何值,这意味着它将是 首先匹配
http://example.com/Admin并且由于路由引擎在之后停止 找到第一场比赛,第二条路线永远不会被使用。
因此,请务必牢记这一情况并考虑订单 您定义自定义路线。
您应首先编写预订路线
routes.MapRoute(
name: "booking",
url: "{controller}/{action}/{id}/{name}",
defaults: new { controller = "Booking", action = "Index", id = UrlParameter.Optional, name=UrlParameter.Optional }
);}
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Search",
url: "{controller}/{location}/{checkIn}/{checkOut}/{no}",
defaults: new { controller = "Search", action = "Index", location = UrlParameter.Optional, checkIn = UrlParameter.Optional, checkOut = UrlParameter.Optional, no = UrlParameter.Optional }
);