我有一个用属性修饰的 ASP.NET MVC 操作OutputCache
,但问题是 MiniProfiler 输出也被缓存了。我想从缓存(甜甜圈洞)中排除 MiniProfiler 输出,但我不确定如何排除 MiniProfiler.RenderIncludes() 之类的调用。
任何碰巧知道我该怎么做的人?
我有一个用属性修饰的 ASP.NET MVC 操作OutputCache
,但问题是 MiniProfiler 输出也被缓存了。我想从缓存(甜甜圈洞)中排除 MiniProfiler 输出,但我不确定如何排除 MiniProfiler.RenderIncludes() 之类的调用。
任何碰巧知道我该怎么做的人?
如果在生产中使用 MiniProfiler,这一点很重要。就好像用户第一次访问页面时启用了 MiniProfiler,所有后续请求都将在 DOM 中包含 MiniProfiler 结果(因为它们现在已被缓存)。不仅结果不正确(因为他们只考虑首次加载),而且所有访问者都将能够看到您的 MiniProfiler 结果。
首先,为了启用甜甜圈洞缓存,我正在使用:
http://mvcdonutcaching.codeplex.com/
这允许您添加在使用 OutputCache 时不会被缓存的操作。
鉴于上述情况,您可以@using StackExchange.Profiling;
从布局页面中删除。然后,您可以替换:
@MiniProfiler.RenderIncludes()
和:
@Html.Action("MiniProfiler", "DoNotCache", excludeFromParentCache: true)
我创建了一个 DoNotCache 控制器,所以我所有的不可缓存元素都在一起,但这不是必需的,您可以将此操作放置在任何控制器中。
public ActionResult MiniProfiler()
{
return View();
}
然后视图本身看起来像:
@using StackExchange.Profiling;
@{
Layout = null;
}
@MiniProfiler.RenderIncludes()
DonutOutputCache
这将确保 MiniProfiler 结果在适当的时候显示出来,并且即使在您使用注释的地方也不会缓存在生产环境中。