2011-05-04 80 views
0

我在我的ASP.NET MVC應用程序只有一個途徑:如何在包含斜槓(/)時創建與參數匹配的路由?

routes.MapRoute(
    "Post", 
    "post/{url}", 
    new { controller = "Blog", action = "Post" } 
); 

當我去/post/MyTestBlahBlah它正確地匹配,並調用Blog.Post(URL)。

然而,當我去/post/2010/03/MyTestBlahBlah我得到一個404

如何使即使有在他們斜線路由匹配的網址?

注:我的網址是不固定的AS /年/月/後,他們可以在任何格式,這就是爲什麼我想匹配所有網址。我需要它捕獲並傳遞到控制器(而不是使用「*」)來幫助測試 - 我不希望Controller從Response對象讀取URL。

回答

4

在你的情況,我會前添加一個新的路由其中描述了路線:

routes.MapRoute(
    "Post_Verbose", 
    "post/{year}/{month}/{url}", 
    new { controller = "Blog", action = "Post" }); 

或者乾脆:

routes.MapRoute(
    "Post", 
    "post/{*url}", 
    new { controller = "Blog", action = "Post" }); 
+0

我的網址沒有固定在這種格式,這就是爲什麼我需要匹配他們所有。我在開始時並沒有真正擁有「/ post /」,但我認爲增加這個可以避免人們告訴我使用「*」,因爲我需要將URL傳遞給Action。 – 2011-05-04 17:46:59

+0

抓住所有路線的問題是他們傾向於打破許多具體的事情。傳遞整個url的目的是什麼,利用路由系統將url部分分離爲相關參數是沒有意義的。 – 2011-05-04 17:49:08

+0

我利用了路由系統 - 我將有多個路由(例如/ archive/{year}/{month}和/ {page}),但是我的帖子可以使用任何其他格式,這意味着他們必須成爲一個catchall(並且將是最後的路線)。 – 2011-05-04 17:54:25

2

我設法找到一個解決方案here。您需要在參數名稱前加上「*」({*url})。具有諷刺意味的是,我嘗試的第一件事是{url*}

routes.MapRoute(
    "Post", 
    "post/{*url}", 
    new { controller = "Blog", action = "Post" } 
);