Asp.net 使用webforms和MVC在项目上路由到aspx页面
我已经将MVC添加到一个现有的webforms项目中,我一直在致力于缓慢地迁移该项目,但是,在变更期间,我需要能够访问这两个项目,但将其默认为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
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”);}