Asp.net 使用webforms和MVC在项目上路由到aspx页面

Asp.net 使用webforms和MVC在项目上路由到aspx页面,asp.net,asp.net-mvc,asp.net-mvc-routing,Asp.net,Asp.net Mvc,Asp.net Mvc Routing,我已经将MVC添加到一个现有的webforms项目中,我一直在致力于缓慢地迁移该项目,但是,在变更期间,我需要能够访问这两个项目,但将其默认为aspx页面 当涉及到注册路由时,我目前有以下几点: private void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); routes.IgnoreRoute("{re

我已经将MVC添加到一个现有的webforms项目中,我一直在致力于缓慢地迁移该项目,但是,在变更期间,我需要能够访问这两个项目,但将其默认为aspx页面

当涉及到注册路由时,我目前有以下几点:

    private void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapPageRoute("Backup", "{*anything}", "~/Default.aspx");

        routes.MapRoute(
            "MVC", 
            "{controller}/{action}/{id}", 
            new { controller = "Test", action = "Index", id = 1 }
        );
    }
但是,当我这样设置时,即使我输入了一个我知道是指控制器/操作组合的URL(例如,本文最后一行的测试和索引),它仍然会将用户重定向到Default.aspx页面

我已尝试将此更改为以下内容:

    private void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "MVC",
            "{controller}/{action}/{id}",
            new { controller = "Test", action = "Index", id = 1 }
        );

        routes.MapPageRoute("Backup", "{*anything}", "~/Default.aspx");
    }
在这里,用户可以指定一个页面或指定一个控制器/操作,但如果它们不包括任何控制器/aspx页面,则默认为默认MVC路由,而我需要它默认为webform default.aspx


我如何避免这种情况,如果没有指定页面/控制器,它将指向~/Default.aspx,如果指定了控制器,它将指向该控制器?

我尝试了您的场景,其中我有一个现有的web表单应用程序,并向其中添加了mvc。基本上,我遇到了两种解决方案

首先:您可以忽略将
路由添加到路由配置中;这就是我所做的

public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.EnableFriendlyUrls();

            routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
请注意我在默认值中排除了控制器的值。现在,即使存在匹配项,并且没有该名称的控制器,请求也会返回到常规ASP.Net管道,以查找aspx页面。使用这种方法,您可以请求类似
http://localhost:62871/
http://localhost:62871/Home/Index
http://localhost:62871/Home/
http://localhost:62871/About.aspx

Second::在这种方法中,您可以在Areas文件夹下为新的基于MVC的工作创建一个区域,并将
App\u Start
中的RouteConfig保留为默认值,以便如下所示

public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.EnableFriendlyUrls();
        }
    }
然后在区域注册类中定义route,如下例所示

public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

希望有帮助。谢谢。

非常感谢,第一种方法非常有效,涵盖了我现在需要的内容,但如果我需要以这种方式拆分内容,我可能会在以后开始使用第二种方法。这是一个巨大的帮助!您可以添加一个简单的控制器,然后将其重定向到您的aspx页面,或者在您的global.ascx:void应用程序_Start(object sender,EventArgs e){System.Web.Routing.RouteTable.Routes.MapPageRoute(“Home”,“Home/Index”,“~/Default.aspx”);}