2010-05-09 159 views
3

我有一個現有的網站,我想轉換爲使用路由,並在閱讀Scott Guthrie's post here後,我構建了一個適用於大多數情況下的工作示例。但是,由於並非現有站點上的所有頁面都與特定模式匹配,因此我需要檢查數據庫以確定要使用哪條路徑(目標.aspx頁面)。ASP.NET 4.0 webforms路由

例如,大多數網頁是這樣的:

http://www.mysite.com/people/person.html

這是好的 - 我可以很容易地使這些到view_person.aspx頁,因爲「人」的目錄。

但是有些頁面是這樣的:

http://www.mysite.com/category_page.html http://www.mysite.com/product_page.html

這就需要檢查數據庫,看看是否路由到view_category.aspx頁面或view_product.aspx頁面。 這就是我卡住的地方。我是否創建一個IRouteHandler來檢查數據庫並返回路由?或者,還有更好的方法?我找到的唯一代碼是the answer to this question

在此先感謝。

回答

0

對於任何陷入相同情況的人,我最終修改了this answer的代碼來檢查數據庫並返回正確的ASPX頁面。

0

如果你不介意的話,最乾淨的解決方案是:

http://www.mysite.com/pages/category_page.html 

在ASP.NET MVC,這種情況將被處理方式稍有不同,通過指定一個默認的控制器和方法根路線。

+0

理解,但在這種情況下它不是一種選擇。該網站有大量的反向鏈接,我們不想冒失去流量和收入的風險。 – Ethan 2010-05-09 19:27:35

0

您的路由處理程序不檢查數據庫。它將所有請求發送給處理程序.aspx腳本。這是檢查數據庫的腳本。

我的註冊路線看起來像......

private static void RegisterRoutes() 
    { 
     Route currRoute = new Route("{resource}.axd/{*pathInfo}", 
            new StopRoutingHandler()); 
     RouteTable.Routes.Add("IgnoreHandlers", currRoute); 

     currRoute = new Route("{urlname}", 
          new EPCRouteHandler("~/Default.aspx")); 
     currRoute.Defaults = new RouteValueDictionary {{"urlname", "index.html"}}; 
     RouteTable.Routes.Add("Default", currRoute); 
    } 

自定義處理程序,它不應該在ASP.Net 4.0是必要的,只是將URLNAME參數響應腳本作爲一個URL變量。

現在響應腳本檢查數據庫的頻率取決於數據庫中數據的更改頻率。例如,假設數據發生更改時,您可以輕鬆地緩存路徑並使緩存失效。