zoukankan      html  css  js  c++  java
  • ASP.NET Core ResponseCaching:子页面缓存key的坑

    最近在做一些老的asp.net mvc 老项目迁移到asp.net core。 其中有很小坑都有的介绍,园子里面有很多人都已经填满了,但是我遇到[OutputCache]到[ResponseCache]的坑 没看到有解决就记录下。

    responsecache 理解起来简单,介绍也很多。就不多说明。下面说说这个小坑

    当一个A页面嵌入了一个子页面B,这个子页面的action上面也用了标记例如:[ResponseCache(Duration = 30, VaryByQueryKeys = new string[] { "currentPage" })],那么访问多次A页面就算每次传递不同的参数,A页面也内容也不会变。于是翻了翻源码  看看,原来是因为缓存的key的值用的子页面B的参数......

    (中间还穿插一个坑:.net core 3.0 后有一个breaking change,IResponseCachingKeyProvider changed to internal,无法自己继承实现,所以切回到.net core2.2测试)

    图片中的源码是ResponseCachingKeyProvider 中缓存key的生成方法。可以看到key里面有子页面参数className,但是没有主页面的currentPage。也就是说当主页面穿插了子页面,子页面用了responsecache,那么只会使用子页面的VaryByQueryKeys或者默认前缀作为key。

    解决办法:因为子页面和主页面的上下文里面使用的是相同的url参数,并且看到源码里面有个判断:VaryByQueryKeys是“ * ”星号,那么地址参数匹配。 所以只要把子页面的VaryByQueryKeys中的参数换成星号就能解决

  • 相关阅读:
    分析内存泄露问题
    Android 官方博客
    python 2.*和3.*的变化
    python __init__.py
    关于python的import
    Android----Gradle
    Python---string
    uwsgi01---uwsgi文件
    Nginx02---指令集实现静态文件服务器
    python依赖文件的生成requirement.txt
  • 原文地址:https://www.cnblogs.com/TeemoHQ/p/14207857.html
Copyright © 2011-2022 走看看