2013-09-27 57 views
0

我有這個OutputCache的例子。 我的問題是,我只想要頁面被緩存,如果[id]等於NULL。在所有其他情況下,我根本不想擁有緩存。如何僅將OutputCache用於特定參數?

myController的:

[OutputCache(Duration = int.MaxValue, VaryByParam = "id")] 
public ActionResult Details(int id) 
{} 

RouteConfig:

routes.MapRoute(
    name: "edit", 
    url: "edit/{id}", 
    defaults: new { 
     controller = "asd", 
     action = "Details", 
     id = UrlParameter.Optional 
    } 
); 

回答

1

您可以指定(並實現)的VaryByCustom參數OutputCacheAttribute

MyController.cs

[OutputCache(Duration = int.MaxValue, VaryByCustom = "idIsNull")] 
public ActionResult Details(int id) 
{ 
} 

的Global.asax.cs

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    if (arg.ToLower() == "idisnull") 
    { 
     return string.IsNullOrWhiteSpace(Request.QueryString["id"]) 
      ? string.Empty 
      // unique key means it won't have a consistent value to use 
      // as a cache lookup 
      : ((new DateTime(1970, 1, 1) - DateTime.Now).TotalMilliseconds).ToString(); 
    } 
} 
+0

謝謝,但[ID]不是查詢字符串。請參閱編輯路由詳細信息 – user1615362

+1

@ user1615362:我沒有看到它在路由'url'中定義,所以有什麼問題? –

+0

這IsNullOrWhiteSpace(Request.QueryString [「id」])將始終爲真。 – user1615362

相關問題