2012-02-12 58 views
0

我試圖使用HttpContext.Current.Request.RawUrl來獲取global.asax文件中的頁面請求的URL段。我的代碼如下:如何將URL的控制器段發送到ASP.NET MVC控制器

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
     new { controller = "Home|Account" } 
    ); 

    var url = HttpContext.Current.Request.RawUrl; 
    var pageTitle = url.Split('/')[1]; 

    routes.MapRoute(
     "SendToCustomController", 
     "{*url}", 
     new { controller = "Custom", action = "Index", title = pageTitle } 
    ); 
} 

如果我在一個地址如devserver鍵入的第一次:1234 /測試時,得到的字符串「測試」通過發送到控制器。問題是,在隨後的請求中,如devserver:1234/confused具有不同的段,我仍然會將'test'發送到控制器。

這樣做的目的是爲了沒有指定控制器的任何請求,URL的控制器段被傳遞給自定義頁面控制器,該自定義頁面控制器將查看DB中是否有用戶生成的頁面。如果有的話,頁面將被加載,如果沒有標準的404將被拋出。

任何幫助理清上面的問題,或更好的方法來實現這一點將是偉大的!

回答

1

您的路線令牌稱爲在註冊{url},然後你使用一些title = pageTitle約束,我不它是從哪裏來的認識(實際上它是硬編碼在你的RegisterRoutes這顯然是對的整個生命週期只運行一次靜態方法第一個請求的應用程序)。你應該避免訪問與你的Application_Start方法相關的任何東西HttpContext。如果你在IIS7 +集成管道模式下運行,那甚至不允許。

所以請嘗試以下操作:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     new { controller = "Home|Account" } 
    ); 

    routes.MapRoute(
     "SendToCustomController", 
     "{*url}", 
     new { controller = "Custom", action = "Index" } 
    ); 
} 

然後:

public class CustomController : Controller 
{ 
    public ActionResult Index(string url) 
    { 
     // TODO: do your checks here based upon the url parameter 
     // and return HttpNotFound(); in case it doesn't match anything 
    } 
} 
+0

我簡直不敢相信它是如此直截了當。我花了大約一個半小時在這! Thankyou :) – Chris 2012-02-12 09:25:37

+0

@ChrisPaynter,在ASP.NET MVC中進行路由並不是最簡單的事情,但是一旦你明白了它的工作原理,就不會有任何問題。你有關於這個線程的進一步問題嗎? – 2012-02-12 09:49:10

+0

不,現在我應該沒事,謝謝Darin。 – Chris 2012-02-12 10:32:43

相關問題