【问题标题】:Wildcards with ASP.NET MVC MapPageRoute to support organizing legacy code带有 ASP.NET MVC MapPageRoute 的通配符以支持组织遗留代码
【发布时间】:2011-03-21 20:57:24
【问题描述】:

我正在将现有的 ASP.NET 网站迁移到 MVC 项目中。有几页(60 多页)我还不想重写,所以我想知道是否有办法:

  • 将现有的 .aspx 页面(标记和代码隐藏文件)移动到我的 MVC 结构中的“旧版”文件夹中
  • 设置路由,以便调用 /foo.aspx(不带 'legacy')实际上会调用 ~/Legacy/foo.aspx

实际上,我不希望 URL 中有“旧版”,但我也不希望 MVC 解决方案充满旧版 .aspx 页面。我承认这是一个非常小的问题,我只是好奇它是否可以通过路由来完成。

我意识到我可以做到:

routes.MapPageRoute("legacy-foo", "Foo.aspx", "~/Legacy/Foo.aspx"); 

但我想知道是否有办法动态地做到这一点(使用 MVC 路由)?例如:

routes.MapPageRoute("legacyroutes", "{filename}.aspx", "~/Legacy/{filename}.aspx"); 

我想一种方法是使用 URL 重写器模块,但如果路由本身能够做到这一点,这似乎有点多余。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing


    【解决方案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/

    【讨论】:

      【解决方案2】:

      不确定你是否还需要这个,但你可以用一个肮脏的解决方案来解决这个问题:

      使用HttpContext.Current.Request.MapPath("") 获取路线的物理位置,然后使用DirectoryInfo/FileInfo 类遍历所有aspx 文件(以及您想要映射的任何其他文件)。然后,您可以为您的文件动态注册替代路径。

      我已经做了一个原型,它似乎正在工作,当然,魔鬼总是在细节中。

      干杯,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 2010-11-08
        • 2010-11-18
        • 2023-02-02
        相关资源
        最近更新 更多