2011-05-20 90 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); 
}