我有一个用OutputCache属性修饰的ASP.NET MVC操作,但是问题是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 Controller ,因此所有不可缓存的元素都在一起,但这不是必需的,您可以将此操作放置在任何 Controller 中。
 public ActionResult MiniProfiler()
 {
      return View();
 }

然后 View 本身看起来像:
@using StackExchange.Profiling;
@{
    Layout = null;
}
@MiniProfiler.RenderIncludes()

这样可以确保在适当的时候显示MiniProfiler结果,即使在使用DonutOutputCache批注的地方也不会缓存在生产环境中。

关于asp.net-mvc - 甜甜圈孔缓存-排除MiniProfiler.RenderIncludes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13893028/

10-10 00:10