我有一个用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/