我正在努力将现有的ASP.NET网站迁移到MVC项目中。有几个(60+)页面我还不想重写,所以我想知道我是否有办法:
实际上,我不希望URL中有“遗留”,但我也不希望MVC解决方案充满遗留的.aspx页面。我接受这是一个非常小的问题,我只是好奇它是否可以通过路由完成。
我意识到我能做到:
routes.MapPageRoute("legacy-foo", "Foo.aspx", "~/Legacy/Foo.aspx");
但我想知道是否有办法动态地(使用MVC路线)?例如:
routes.MapPageRoute("legacyroutes", "{filename}.aspx", "~/Legacy/{filename}.aspx");
我想一种方法是使用URL重写器模块,但如果路由能够本地执行此操作,那似乎有点多余。
答案 0 :(得分:1)
不确定你是否仍然需要这个,但你可以用一个肮脏的解决方案来解决这个问题:
使用HttpContext.Current.Request.MapPath("")
获取路径的物理位置,然后使用DirectoryInfo/FileInfo
类循环遍历所有aspx文件(以及您要映射的任何其他内容)。然后,您可以动态注册文件的备用路径。
我已经完成了一个原型,它似乎正在起作用,当然,魔鬼总是在细节中。
干杯,
答案 1 :(得分:1)
我使用控制器解决了这个问题,该控制器返回文件的内容。它不是一个完美而快速的解决方案,但它有效。
routes.MapRoute(
"legacyroutes",
"{filename}.aspx",
new { controller = "Home", action = "RedirectFile"}
);
控制器:
public class HomeController : Controller
{
public ActionResult RedirectFile(string filename)
{
string url = Url.Content("~/Legacy/"+filename+".aspx");
Redirect(url); // or other code to process the file
}
}
此处的详细信息和其他示例:http://maxivak.com/dynamic-url-rewriting-on-asp-net-mvc/