zoukankan      html  css  js  c++  java
  • Asp.Net 截取输出流

    起因

    因为相对IIS做一些设置来优化一下

    不修改代码就能优化ASP.NET网站性能的一些方法
    主要参照了这里的文档 其他都还ok 就是内容过期这块跟leader有点冲突,leader觉得这个可以用但是万一想更新个图片,js什么的,客户端不能及时展示,甚至有可能引发bug。想让我在不动原代码的基础上,在更改资源后达到客户端刷新的效果。浏览器如果已经缓存了静态资源,服务器在更改资源的情况下,没有什么方式能够告诉客户端内容改变了。比如说 客户端缓存了一张图片,服务器这边图片名没变,但内容变了,客户端是没有办法知道这张图片已经变了的。浏览器在向服务器发送请求之前,就知道“哦 我本地缓存有这张图片,直接用吧”,最后都不会发送请求。所以更改必须要等内容过期后才能在客户端展示。leader说那就写个httpmodule ,截取一下输出流 给这些静态资源加个查询字符串来强制让浏览器获取数据吧。
    所以 问题来了 ,如何截取输出流并对内容进行更改呢?

    解决方案

    因为HttpResponse.Stream 是不能读了,所以没办法直接写个httpmoedule在发送内容前,读取内容更改再重写进去。拦截asp.net输出流并进行处理的方法

    这儿提到了解决思路:

    这里之所以用反射,是因为Response对象的OutPut属性是只读的,通过反编译该类的程序集发现,OutPut实际上是内部私有成员 _writer来实现输出的。因此通过反射来改写该成员的值以实现输出流的重定向。```
    
    还有三种解决方式  
    前两种 只是针对aspx,应该可以使用,后一种试了试报:不能筛选的错误。
    所以要针对静态文件,只能再看看其他方法。
    后来就找到了 这个 [Asp.net2.0 中自定义过滤器对Response内容进行处理](http://www.cnblogs.com/DrWang/archive/2011/04/15/2016797.html)
    别看时间老,还真管用。
    
    ps:有可能需要设置一下,让静态文件也走Asp.net管道
  • 相关阅读:
    ycsb
    Tikv docker-compose go client
    Raft 协议
    kubectl 命令
    JAVA判断是否是微信内置浏览器,是否是在微信内打开
    IDEA设置默认maven配置
    JAVA中JDK1.8的LocalDateTime日期类的操作方法
    JAVA在JDK1.8中Stream流的使用
    Linux(Centos)部署Jenkins
    Linux(Centos)安装maven
  • 原文地址:https://www.cnblogs.com/prayol/p/8507994.html
Copyright © 2011-2022 走看看