我想在我的ASP.NET MVC網站中使用OutputCaching。問題是,當我嘗試更改一個查詢字符串參數的值時,它將返回請求的第一個項目的數據!緩存不正確在我的ASP.NET MVC網站?
這裏是我的代碼(與帕拉姆名稱變更)...
[ApiAuthorize]
[HandleErrorAsJson]
public class SearchController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(Duration = 60, VaryByParam = "*")]
public ActionResult ScoreCard(string foo, byte? bar, byte? pewpew)
{
..
}
}
- 注1:ApiAuthorize - 自定義屬性檢查所謂的「關鍵」查詢字符串PARAM並在內存中的字典檢查的,看看它是否存在。
- 注2:HandleErrorAsJson - 自定義屬性,如果拋出異常,則返回錯誤消息爲json。
和這裏的兩個示例調用我正在做這個動作: -
- /GET http://api.MySite.com/search/scorecard?foo=hello+world,+PewPew&key=abcd1234&bar=2
- /GET http://api.MySite.com/search/scorecard?foo=invalid+search+stuff&key=abcd1234&bar=2
所以從第一次調用數據(FOO = hello world,Pew Pew)以200 OK返回。 然後第二個api調用返回200 OK,但是使用前一個調用的數據。
此外,我沒有使用任何代理服務器。 如果我註釋掉OutputCache屬性,一切都很好。
我也試過以下(每次我需要手動緩存上市).....
[OutputCache(Duration = 60, VaryByParam = "foo,key,bar,pewpew")]
沒有運氣:(
注意我需要如何確保我包含API'Key'參數作爲緩存唯一鍵的一部分我不想讓人們搜索同樣的東西,但如果第二個人沒有正確的鍵,他們不應該得到緩存的結果,但一個錯誤信息(技術上,這是一個401沒有授權,但無論如何)...
你亮燈?
+1更直接關注手頭的問題。儘管我不認爲這是他在這裏唯一的問題。也在下面回覆你的評論。 – dove 2009-09-17 14:23:59