我有一个动作,让我们说/ Foo / Bar在这个动作中有一个GET参数, get_cached,用于定义是否要获取缓存值或“实时”。
使用以下代码:
public ActionResult Bar()
{
var useCache = Request.Params["get_cached"] == "1" ? true : false;
if (useCache)
{
return RedirectToAction("BarCached");
}
else
{
return RedirectToAction("BarRealTime");
}
}
[OutputCache(Duration = 100, VaryByParam = "*")]
public ActionResult BarCached()
{
return Content("mystuff_cached");
}
public ActionResult BarRealTime()
{
return Content("mystuff_realtime");
}
此代码没问题,除了网址将显示为 BarCached 或 BarRealTime ,我只会获得Bar(主要操作名称)。
我尝试将RedirectToAction更改为完整的方法名称,如下所示:
return this.BarCached()
但这会禁用缓存功能!
那么,如何使用此方法上的OutputCache定义(BarCached上的OutputCache)从方法(从Bar渲染BarCached)呈现ActionResult代码?
先谢谢。
答案 0 :(得分:1)
在asp.net pipeline中,ResolveRequestCache(OutputCache所依赖的)在请求通过身份验证后发生。在上面的示例中,当您使用“Bar”时,使用输出缓存为时已晚,正如您所说,this.BarCached()
无法识别缓存属性。
如果问题是生成"mystuff_"
生成的问题,您是否只能将该调用的结果保存到应用程序缓存中并将其返回到Bar()
方法而不是RedirectToAction
对象?
我所知道的解决方案并不多,但希望同样有用。
答案 1 :(得分:0)
我结束使用System.Web.Caching
命名空间,它是asp.net MVC的基本缓存处理程序。
我可以使用System.Web.HttpContext.Current.Cache
使用它,我存储" BarCached"的ActionResult。然后我可以按照我想要的方式获取缓存功能:
向缓存添加值
System.Web.HttpContext.Current.Cache.Insert(
"mykey",
"myvalue",
null,
DateTime.Now.AddSeconds(expirationInSeconds),
System.Web.Caching.Cache.NoSlidingExpiration
);
从缓存中获取值
var myvalue = System.Web.HttpContext.Current.Cache.Get("mykey")