我以为我可以为我的混合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等。我必须做错了!
答案 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页面。