混合ASP.NET和MVC路由

时间:2016-01-20 21:11:38

标签: c# asp.net asp.net-mvc url routing

我以为我可以为我的混合ASP.NET + MVC应用程序中的所有路由提供友好的URL,但它没有按预期工作。这是我的路由定义设置:

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"对于控制器和"关于"对于动作实际上在页面源中呈现为' http://..../Design/Fancy?action=About&controller=Home'。因此,这会破坏所有导航菜单URL等。我必须做错了!

1 个答案:

答案 0 :(得分: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页面。