【问题标题】:ASP.NET 4.6 MVC Output Caching with Razor Syntax Issues带有 Razor 语法问题的 ASP.NET 4.6 MVC 输出缓存
【发布时间】:2019-05-13 19:05:58
【问题描述】:

我有一个 ASP.NET 4.6 项目,它使用返回我的视图的 MVC 控制器和返回数据的 WebAPI 控制器。

我想为我的 MVC 控制器添加输出缓存,因为我已经完成了一些测试,并且页面加载的性能差异很大。

[OutputCache(CacheProfile = "PageCache")]
public ActionResult Home()
{
     return View("~/Views/Home/Index.cshtml");
}

我面临的唯一挑战是视图上的剃刀语法也被缓存了。 例如,如果用户 1 加载了一个路由,那么用户 2 将获得与用户 1 注入的用户名相同的路由。

除了摆脱页面中的所有剃刀语法之外,我还有哪些选择?有没有人能很好的解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    您可以使用 VaryByCustom 或 VaryByParam 属性。以下代码是基于参数'id'的缓存。

        [OutputCache(Duration = int.MaxValue, VaryByParam = "id")]
        public ActionResult Details(int id)
        {
            ViewData.Model = _dataContext.Movies.SingleOrDefault(m => m.Id == id);
            return View();
        }
    

    您也可以在 web.config 文件中创建缓存配置文件

    <caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="Cache1Hour" duration="3600" varyByParam="none"/>
        </outputCacheProfiles>
    </outputCacheSettings>
    </caching>
    

    更多信息请查看Link

    【讨论】:

    • 我已经使用 VaryByCutom 来实现基于登录用户的基于服务器的缓存。在解决方案升级到带有令牌身份验证的核心和没有剃刀语法的前端之前,这个解决方案就足够了。
    【解决方案2】:

    你不应该在服务器上缓存用户信息,它应该被缓存在客户端。

    请看一下这份文件。

    https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/improving-performance-with-output-caching-cs

    【讨论】:

    • 我确实将位置设置为客户端,但我得到了相同的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多