我有一个动作有这些属性:
[OutputCache(Location = System.Web.UI.OutputCacheLocation.Server, Duration = 300, VaryByParam = "*")]
和另一个
[OutputCache(Location = System.Web.UI.OutputCacheLocation.None)]
他们都使用相同的视图。
在View中,甚至在Action Method中,如何确定缓存是什么?即它是否是缓存页面?我已经尝试过查看Response.Headers(只有“Server:Microsoft-IIS / 7.0)”和“Response.CacheControl”在两种情况下都是“私有”。
答案 0 :(得分:0)
我没有在应用程序中使用它,但是为了查看是否可能,我已经完成了这个示例...使用Reflection和一个基本控制器,并从我的action方法调用Initialize(),以下代码从调用方法获取OutputCache属性。然后,View或Partial View可以从ViewBag获取缓存位置。
public class BaseController : Controller
{
public void Initialize()
{
var stackTrace = new StackTrace();
if (stackTrace.FrameCount >= 1)
{
var methodBase = stackTrace.GetFrame(1).GetMethod();
var filters = (OutputCacheAttribute[])methodBase.GetCustomAttributes(typeof(OutputCacheAttribute), false);
if (filters.Length > 0)
{
ViewBag.CacheLocation = filters[0].Location;
}
}
}
}