2010-04-17 30 views
1

我在Global.asax文件路由設置:排除在VaryByParam時路由參數Asp.Net 4

routes.MapPageRoute("video-browse", "video/{id}/{title}/", "~/routeVideo.aspx"); 

我routeVideo.aspx頁面有緩存設置:

<%@ OutputCache Duration="10" Location="ServerAndClient" VaryByParam="id" %> 

但是,當在此之後,我請求http://localhost/video/6/example1http://localhost/video/6/example2,頁面再次創建。所以我認爲VaryByParam適用於*,但我只想在id更改時編譯。有沒有辦法在VaryByParam中定義路由參數?

我想要這個,因爲標題參數對我來說並不重要。它僅適用於搜索引擎,並且它不在我的代碼中使用。

回答

4

VaryByParam處理問號'?'後面的參數,但是您將路徑隱藏到路徑中。這就是爲什麼緩存總是「看到」不同的網址。 要修復它改變

"video/{title}?id={id} 
+0

@Dewfy但是我要像本地主機/視頻/ someID /任何所有權的網址。此外,我以這種方式獲取路由參數:Page.RouteData.Values [「id」] – 2010-04-17 12:45:27

+2

@HasanGursoy然後,而不是VaryByParam使用VaryByCustom。最後一個給你寫出自己的方法來構成緩存系統的關鍵的可能性。 – Dewfy 2010-04-18 21:57:12

0

試試這個:

routes.MapPageRoute("video-browse", "video/{id}/{title}/", 
        "~/routeVideo.aspx?id={id}"); 
+0

@Raj Kaimal:我收到錯誤「路由URL不能以'/'或'〜'開頭,也不能包含'?'字符 參數名稱:routeUrl「當試圖使用」〜/ routeVideo.aspx?id = {id}「 – 2010-05-04 12:59:13

+0

如何指定您想要的路徑? routes.MapPageRoute(「video-browse」,「video/{id}/{title} /」, 「MyFolder/MyVideos/routeVideo.aspx?id = {id}」); – 2010-05-04 13:41:40

0

您可能需要設置validateIntegratedModeConfiguration假在你的web.config。

例如,看到...

Outputcache doesn't work with routing

+0

@kervin:我目前的配置是用路由緩存頁面。 validateIntegratedModeConfiguration =「false」沒有幫助。我只想根據id參數來緩存我的頁面。我想忽略標題參數。但是我不能讓VaryByParam =「id」工作。 – 2010-05-05 06:53:50