2010-12-04 56 views
1

我在ASP.NET MVC2定製routehandler捕獲所有的URL在這樣的前綴路徑:定製IRouteHandler路線搞砸了MVC的鏈接建設

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
routes.Add(new Route("@api/{*all}", new ApiHandler())); 
routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

路由工作正常,但如果我使用Html.Actionlink或從控制器返回ReturnToAction(),內置的URI創建一個破碎URI是這樣的:

/@api?action=Add&controller=Home 

代替

/Home/Add 

我如何影響uri構建邏輯來考慮默認路由模式?

回答

1

,我想出了一個黑客停止所描述的行爲。雖然這種「解決」的問題,這真是一種討厭的,我寧願排除從虛擬路徑構建邏輯的路線更清潔的方式

routes.Add(
    new Route("@api/{*all}", 
    // A random and unlikely controller name as the default 
    new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } }, 
    // and a constraint requiring any controller to be that random, default value 
    new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } }, 
    new ApiHandler() 
); 

這意味着,該航線將只選擇了虛擬路徑如果問題控制者是「qwewqewqeqweq」,那麼希望這種情況不太可能發生。我說這是討厭的。

0

你可以使用RouteLink幫手指定路由的名稱:

<%: Html.RouteLink("link text", "Default", 
    new { action = "add", controller = "home" }) %> 
+1

我討厭推動我想建立的每一個環節的負擔,只是因爲我有一條路線錯誤地篡奪了正確的路線。 – 2010-12-04 15:32:34