我正在使用MVCDonutCaching库进行甜甜圈缓存。
使用此库进行甜甜圈缓存的背景
它的工作方式,是您可以缓存一个视图,但排除它的一部分被缓存,即“甜甜圈洞”。要做到这一点,您可以将无法理解的内容作为部分视图,这是由子操作呈现的。然后在视图中将该子动作称为Html.RenderAction(...。这样,除了那个子动作之外,一切都会被缓存。
问题
我需要缓存一个视图,它包含一个表单。问题是表单包含一个AntiForgeryToken,显然不应该缓存它。
一个明显的解决办法是使它形成一个“甜甜圈洞”,并使它通过一个孩子的行动。但是,它需要复杂的视图模型数据,而子操作只能接受原语类型作为参数,否则就会出现序列化错误。
绕开这条路有什么好办法?
发布于 2015-05-21 18:09:13
找到办法了。不确定它是否是最优的,但它有效。
我把防伪标记本身变成甜甜圈洞,而不是把它做成“甜甜圈洞”。
[ChildActionOnly]
public virtual ContentResult GetAntiForgeryToken() {
using (var viewPage = new ViewPage()) {
var htmlHelper = new HtmlHelper(new ViewContext(), viewPage);
var token = htmlHelper.AntiForgeryToken();
return Content(token.ToHtmlString());
}
}这需要创建一个虚拟HtmlHelper,然后手动创建令牌。
https://stackoverflow.com/questions/30369451
复制相似问题