2011-05-20 94 views
2

我已經定義的路由文化/控制器/動作/ ID ...我控制器包含以下動作..緩存在Asp.net基於URL參數MVC

[OutputCache(Duration=60*10)] 
     public ActionResult Index() 
     {*/do magic here/*} 

是有可能緩存基於內容文化?

回答

3

localization complete guide介紹瞭如何使用VaryByCustom參數實現此目的的示例。在Global.asax中,你會重寫GetVaryByCustomString方法:

public override string GetVaryByCustomString(HttpContext context, string value) 
{ 
    if (value == "lang") 
    { 
     return Thread.CurrentThread.CurrentUICulture.Name; 
    } 
    return base.GetVaryByCustomString(context, value); 
} 

然後:

[OutputCache(Duration = 60 * 10, VaryByParam = "none", VaryByCustom = "lang")] 
public ActionResult Index() 
{ 
    /* do magic here */ 
    ... 
} 

或者,如果你想僅僅依靠文化路線數據參數,你可以這樣做:

public override string GetVaryByCustomString(HttpContext context, string value) 
{ 
    if (value == "lang") 
    { 
     var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(context)); 
     var culture = (string)routeData.Values["culture"]; 
     if (!string.IsNullOrEmpty(culture)) 
     { 
      return culture; 
     } 
    } 
    return base.GetVaryByCustomString(context, value); 
}