映射自定义路由 ASP.NET MVC5
Map Custom Route ASP.NET MVC5
我以前没有使用过 .NET 路由。
我有一个URL: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" });
}
我收到错误:
The constraint entry IsIPA
on the route with route template Account/Login/{IsIPA}=True
must have a string value or be of a type which implements System.Web.Routing.IRouteConstraint
.
未经测试,我认为您想要这个:
routes.MapRoute("IPA", "Account/Login/{IsIPA}",
new { controller = "Account", action = "Login", IsIPA = "true"});
路由匹配类似于switch case语句。 url
参数以及任何默认值和约束都被视为确定它是否与传入的 URL 匹配。如果路由匹配,它将根据配置创建一个路由值字典。如果路由不匹配,则尝试集合中的下一条路由,直到找到(或没有)匹配。
这意味着指定路由的顺序很重要。默认路由匹配 any 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
。同样的 URL 将为 Controller/Action/IsIPA 组合构建,因为它是列表中第一个匹配的组合。
请注意,原来的 URL http://myurl.com/Account/Login/?IsIPA=true
仍然有效,并且仍然路由到相同的位置。此配置只是为该资源添加了一条额外的路由。
我以前没有使用过 .NET 路由。
我有一个URL: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" });
}
我收到错误:
The constraint entry
IsIPA
on the route with route templateAccount/Login/{IsIPA}=True
must have a string value or be of a type which implementsSystem.Web.Routing.IRouteConstraint
.
未经测试,我认为您想要这个:
routes.MapRoute("IPA", "Account/Login/{IsIPA}",
new { controller = "Account", action = "Login", IsIPA = "true"});
路由匹配类似于switch case语句。 url
参数以及任何默认值和约束都被视为确定它是否与传入的 URL 匹配。如果路由匹配,它将根据配置创建一个路由值字典。如果路由不匹配,则尝试集合中的下一条路由,直到找到(或没有)匹配。
这意味着指定路由的顺序很重要。默认路由匹配 any 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
。同样的 URL 将为 Controller/Action/IsIPA 组合构建,因为它是列表中第一个匹配的组合。
请注意,原来的 URL http://myurl.com/Account/Login/?IsIPA=true
仍然有效,并且仍然路由到相同的位置。此配置只是为该资源添加了一条额外的路由。