我有一个用属性修饰的 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 结果在适当的时候显示出来,并且即使在您使用注释的地方也不会缓存在生产环境中。