Rhy*_*ens 4 c# asp.net-mvc url-routing asp.net-mvc-routing asp.net-mvc-5
我之前没有使用过.NET Routing.我有一个网址:http://myurl.com/Account/Login/?IsIPA=true.我希望能够使用以下内容点击此URL:http://myurl.com/IPA
这是我想要的唯一自定义路线.
我可以为这样的单个URL创建路由吗?
我的代码不起作用是:
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" });
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
IsIPA具有路由模板的路由上的约束条目Account/Login/{IsIPA}=True必须具有字符串值或者是实现的类型System.Web.Routing.IRouteConstraint.
路由匹配类似于switch case语句.该url参数以及任何默认值和约束都被认为是确定它是否与传入的URL匹配.如果路由匹配,则它将根据配置创建路由值字典.如果路由不匹配,则尝试集合中的下一个路由,直到找到匹配(或不匹配).
这意味着指定路由的顺序很重要.默认路由匹配具有0,1,2或3个段的任何 URL.因此,在大多数情况下,您需要在默认路由之前定义自定义路由.
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 }
);
}
Run Code Online (Sandbox Code Playgroud)
上面的配置将路由http://myurl.com/IPA到名为Controller且名为AccountAction的方法Login,并传递其他路由密钥IsIPA.将为Controller/Action/IsIPA组合构建相同的URL,因为它是列表中匹配的第一个URL.
请注意,原始网址http://myurl.com/Account/Login/?IsIPA=true仍然可以使用并仍然路由到同一位置.此配置只是为该资源添加了一条额外的路由.
| 归档时间: |
|
| 查看次数: |
4703 次 |
| 最近记录: |