2016-01-20 4 views
2

Я думал, что у меня могут быть дружественные URL-адреса для всех маршрутов в моем смешанном приложении ASP.NET + MVC, но он не работает так, как я ожидаю. Вот моя установка определение маршрутизации:Смешивание маршрутизации 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 страницы Любые теги Razor действия на той же странице, которые определены, например, как «Home» для контроллера и «О» для Action фактически отображаются в источнике страницы как «http://..../Design/Fancy?action=About&controller=Home». Таким образом, это нарушает все URL навигационных меню и т. Д. Я должен делать это неправильно!

+0

Как выглядит ваше действие на бритву? –

+0

Вы можете попробовать изменить порядок маршрутизируемых маршрутов, поставив маршрут «По умолчанию» до маршрутов «Дизайн-Причудливый» и «Простой дизайн», поскольку маршруты, которые отображаются сначала, имеют более высокий приоритет. Однако это может нарушить нормальное поведение ваших маршрутов 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 расширения.

Смежные вопросы