asp.net-mvc - View 或 Partial View 是否可以确定它是否被缓存

标签 asp.net-mvc

我有一个 Action 具有这些属性:

  [OutputCache(Location = System.Web.UI.OutputCacheLocation.Server, Duration = 300, VaryByParam = "*")]

还有一个

  [OutputCache(Location = System.Web.UI.OutputCacheLocation.None)]

并且他们都使用相同的 View 。

在 View 中,甚至在操作方法中,我如何确定缓存是什么?即它是否是缓存页面?我试过查看 Response.Headers(只有“服务器:Microsoft-IIS/7.0”),& Response.CacheControl 在这两种情况下都是“私有(private)的”。

最佳答案

我没有在应用程序中使用它,但为了看看它是否可行,我已经完成了这个示例......使用反射和基本 Controller ,并从我的操作方法中调用 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;
            }
        }
    }
}

关于asp.net-mvc - View 或 Partial View 是否可以确定它是否被缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986707/

相关文章:

javascript - Javascript 中的 Html.Action 包含 js var 作为参数

javascript - 如何将多个变量从 typescript (angular.js)传递到 Web API(MVC)中的 Controller

c# - 在 ASP.NET MVC 中动态呈现 View 的安全隐患

c# - 通过 Entity Framework 创建记录时未插入数据库默认值

c# - ASP.NET MVC - 无法在对象中插入重复的键行

html - 使用 Bootstrap 将 CheckBox 右对齐

asp.net-mvc - 将变量传递给 Ajax.ActionLink OnSuccess、OnComplete、OnFailure 等

asp.net - 尝试从 vmware fusion 进行 asp.net mvc 开发

asp.net-mvc - ASP.NET MVC 6 中的文件 IO Close() 方法错误

c# - 在 asp.net 中更改区域性时实例是只读异常