使用授权过滤器区分控制器操作以进行高速缓存

时间:2016-01-20 13:22:04

标签: asp.net asp.net-mvc caching

我正在尝试使用[OutputCache(Duration = 3600]注释为匿名用户缓存控制器中的操作。 E.g:

[OutputCache(Duration = 3600)]
[ActionName("Test")]
public async Task<ViewResult> Test() {...}

在我的研究中,我发现了一种非常聪明的方法来使用ActionMethodSelectionAttribute来实现这一点,但是一旦匿名操作被缓存,它就适用于匿名和授权版本。

我需要为首页和信息页面进行此缓存。在所有情况下,顶级菜单对于授权用户将是不同的。问题是菜单是_Layout中的一部分添加,因此与其余操作一起缓存。 E.g:

<body>
    <div class="contain-to-grid oversizedContainer">
        @Html.Action("Menu", "Framework")
    </div>

    @RenderBody()

第二个问题是在信息页面上显示的一些内容将取决于用户是否被autherher(使用razor @if!Request.IsAuthenticated检查)和视图模型中的数据(@Model)。

我更喜欢不需要我重写所有观点的东西。

PS!我知道VaryByParam,但这些操作不接受任何参数,而是直接链接。

0 个答案:

没有答案