gpt4 book ai didi

c# - 映射自定义路由 ASP.NET MVC5

转载 作者:太空狗 更新时间:2023-10-30 00:24:09 24 4
gpt4 key购买 nike

我以前没有使用过 .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.

最佳答案

路由匹配类似于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 }
);
}

上面的配置会将 http://myurl.com/IPA 路由到名为 Account 的 Controller 和名为 Login 的 Action 方法,并且传递额外的路由键 IsIPA。将为 Controller/Action/IsIPA 组合构建相同的 URL,因为它是列表中匹配的第一个。

请注意,原始 URL http://myurl.com/Account/Login/?IsIPA=true 仍然有效,并且仍会路由到同一位置。此配置只是为该资源添加了一条额外的路由。

关于c# - 映射自定义路由 ASP.NET MVC5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28824505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com