2010-10-09 33 views
1

我在獨特的ASP.Net MVC項目中獲得了獨特的需求。基本上,我們正在將一個較舊的基於Linux的網站遷移到MVC,我們希望保留最後一個網站上的網址。如何根據查詢表檢查基於url的ASP.Net MVC?

爲網站的子目錄(例如www.mywebsite.com/pickes/cherry-pickle-recipe.html)創建一個新的控制器是不實際的。

所以我想這樣做的以下

  1. 一個創建的URL的查找列表。應該根據數據庫檢查URL,如果發現URL,則應該從某個控制器返回某個操作。

  2. 捕獲所有沒有控制器的url請求,並將它們發送給某個controller-> action。

我應該怎麼辦?

回答

5

嗯,我想你可以通過編寫自定義routehandler做到這一點通過實施IRouteHandlerInterface

public class LookupRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     IRouteHandler handler = new MvcRouteHandler(); 
     var vals = requestContext.RouteData.Values; 
     if(String.IsNullOrEmpty(vals["controller"]) 
     { 
      // fetch action and controller from database 
      vals["controller"] = dbcontroller; 
      vals["action"] = dbaction; 
     } 
     return handler.GetHttpHandler(requestContext); 
    } 
} 

你要做的一件事就是註冊在Global.asax中的路由處理像

routes.MapRoute(
    "dbroute", 
    "{controller}/{action}/{id}", 
    new { id = "" } 
    ).RouteHandler = new LookupRouteHandler(); 
+3

其值得說 - 在應用程序啓動時的global.asax.cs中,一次爲查找表命中數據庫,並將結果緩存到某處,以便您可以在此處使用它。 – Nik 2010-10-09 18:13:23

+0

是的,這將節省數據庫命中每個請求+1 – 2010-10-09 19:41:44