簡體   English   中英

映射自定義路由 ASP.NET MVC5

[英]Map Custom Route ASP.NET MVC5

我以前沒有使用過 .NET 路由。 我有一個 URL: http://myurl.com/Account/Login/?IsIPA=true 我希望能夠使用以下內容訪問此 URL: http://myurl.com/IPA : 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" });
}

我收到錯誤:

具有路由模板Account/Login/{IsIPA}=True的路由上的約束條目IsIPA必須具有字符串值或實現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。

請注意,原始 URL http://myurl.com/Account/Login/?IsIPA=true仍然有效並且仍然路由到相同的位置。 此配置只是為該資源添加了一個額外的路由。

沒有測試它,我認為你想要這個:

routes.MapRoute("IPA", "Account/Login/{IsIPA}", 
               new { controller = "Account", action = "Login", IsIPA = "true"});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM