之前我没有使用过.NET Routing。
我有一个网址: http://myurl.com/Account/Login/?IsIPA=true
。
我希望能够使用以下内容点击此网址: http://myurl.com/IPA
这是我想要的唯一自定义路线。
我可以为这样的网址创建路由吗?
我的代码无效:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute("IPA", "Account/Login/{IsIPA}", new { controller = "Account", action = "Login", IsIPA = "true" });
}
我收到错误:
路由模板
IsIPA
的路由上的约束条目Account/Login/{IsIPA}=True
必须具有字符串值或者是实现System.Web.Routing.IRouteConstraint
的类型。
答案 0 :(得分:7)
路由匹配类似于switch case语句。 url
参数以及任何默认值和约束都被认为是确定它是否与传入的URL匹配。如果路由匹配,则它将根据配置创建路由值字典。如果路线不匹配,则尝试集合中的下一个路线,直到找到(或不匹配)匹配。
这意味着指定路线的顺序很重要。默认路由将任何 URL与0,1,2或3段匹配。因此,在大多数情况下,您需要在默认路由之前定义自定义路由。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "IPA",
url: "IPA",
defaults: new { controller = "Account", action = "Login", IsIPA = "true" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
上述配置会将http://myurl.com/IPA
路由到名为Account
的Controller和名为Login
的Action方法,并传递其他路由密钥IsIPA
。将为Controller / Action / IsIPA组合构建相同的URL,因为它是列表中匹配的第一个。
请注意,原始网址http://myurl.com/Account/Login/?IsIPA=true
仍然可以使用,但仍会路由到同一位置。此配置只是为该资源添加了一条额外的路由。
答案 1 :(得分:0)
没有测试,我认为你想要这个:
routes.MapRoute("IPA", "Account/Login/{IsIPA}",
new { controller = "Account", action = "Login", IsIPA = "true"});