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管道
  • 相关阅读:
    [HEOI2013]Eden 的新背包问题
    [UOJ#77]A+B Problem
    [CodeForces]786B Legacy
    [LUOGU]P4098[HEOI2013]ALO
    [BZOJ3207]花神的嘲讽计划
    [LUOGU]P2633 Count on a tree
    【东莞市选2007】拦截导弹
    [JZOJ] 3462. 【NOIP2013模拟联考5】休息(rest)
    [BZOJ] 2705: [SDOI2012]Longge的问题
    [BZOJ] 1191: [HNOI2006]超级英雄Hero
  • 原文地址:https://www.cnblogs.com/prayol/p/8507994.html
Copyright © 2011-2022 走看看