2016-01-20 95 views
2

我以爲我可以在我的混合ASP.NET + MVC應用程序中爲所有路由設置友好的URL,但它不像我期望的那樣工作。這裏是我的路由定義設置:混合使用ASP.NET和MVC路由

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapPageRoute("Design-Fancy", "Design/Fancy/{*queryvalues}", "~/Design/example10.aspx", true); 
    routes.MapPageRoute("Design-Simple", "Design/Simple/{*queryvalues}", "~/Design/example5.aspx", true); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

雖然這個工程路線* .aspx頁,被例如定義爲「家庭」爲控制器和在同一頁上的任何剃刀動作標記「關於」因爲Action實際上在頁面源中呈現爲'http://..../Design/Fancy?action=About&controller=Home'。所以,這打破了所有的導航菜單網址等,我一定是做錯了!

+0

你的剃鬚刀動作是什麼樣子的? –

+0

您可以嘗試通過在「Design-Fancy」和「Design-Simple」路由之前放置「Default」路由來更改映射路由的順序,因爲首先映射的路由具有更高的優先級。但是,這可能會破壞您的Fancy和Simple路線的正常行爲。 – Chase

+0

https://www.packtpub.com/books/content/mixing-aspnet-webforms-and-aspnet-mvc – RoteS

回答

0

這是我解決的解決方案。我安裝了NuGet Microsoft.AspNet.FriendlyUrls軟件包。然後,我使用頁面名稱命名.aspx頁面,該頁面在沒有擴展名的情況下看起來不錯。然後,我設置了路由如下:


    public static void RegisterRoutes(RouteCollection routes) 
    { 
     FriendlyUrlSettings aspxSettings = new FriendlyUrlSettings(); 
     aspxSettings.AutoRedirectMode = RedirectMode.Off; // default=Off 
     routes.EnableFriendlyUrls(aspxSettings); 

     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

     routes.MapPageRoute("Design-Fancy", "Design/Fancy/{*queryvalues}", "~/Design/Fancy.aspx", true); 
     routes.MapPageRoute("Design-Simple", "Design/Simple/{*queryvalues}", "~/Design/Simple.aspx", true); 
    } 

這給了我想要的效果,並與我的MVC路由的工作原理,並導致路由,同時消除了.aspx擴展爲.aspx頁面。