2010-07-27 47 views
4

我正在將現有的ASP.NET網站遷移到MVC項目中。有幾頁(60+)我現在不想重寫,所以我想知道我是否有辦法:通配符與ASP.NET MVC MapPageRoute支持組織遺留代碼

  • 移動現有的.aspx頁面(包括標記和代碼-behind文件)到一個「傳統」的文件夾在我的MVC結構
  • 設置路由,以便調用/foo.aspx(沒有「傳統」)將實際調用〜/傳統/ foo.aspx

實際上,我不希望URL中存在「遺留」,但我也不希望MVC解決方案充滿遺留的.aspx頁面。我接受這是一個非常小的觀點,我只是好奇它是否可以通過路由完成。

我知道我可以做的:

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

但我不知道是否有辦法做到這一點動態(使用MVC路由)?例如:

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

我想一個方法是使用一個URL重寫模塊,但似乎有點多餘,如果路線能夠原生這樣做的。

回答

1

不知道你還需要這一點,但你可以解決這個問題有一個骯髒的解決方案:

使用HttpContext.Current.Request.MapPath("")獲得的物理位置路徑,然後使用DirectoryInfo/FileInfo類遍歷所有aspx文件(以及任何其他想要映射的文件)。然後您可以爲您的文件動態註冊替代路徑。

我已經做了一個原型,它似乎工作,雖然當然,魔鬼總是在細節。

乾杯,

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/