博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个页面标题和过滤输出的解决方案(上)
阅读量:6261 次
发布时间:2019-06-22

本文共 1531 字,大约阅读时间需要 5 分钟。

首先要提到一个东西:Response.Filter,它可以为你服务什么?

filter可以让你截取到最后的html输出,如果你的程序需要在输出之前,做一些处理,用这个比较方便。

 

 

第二个问题,在哪里,如何使用Response.Filter

这里使用上全局的Global.asax处理,在Global.asax的Application_BeginRequest事件里截取html

 

 

事件代码复杂?其实就一行:

protected
 
void
 Application_BeginRequest(
object
 sender, EventArgs e)
{
    HttpContext.Current.Response.Filter 
=
 
new
 HttpResponseFilter(HttpContext.Current.Response.Filter,
new
 ReplaceTextList());
}

 

 

代码中的HttpResponseFilter类是什么?

说功能:这类主要实现的功能是,接替默认的Filter,然后换成自定义的Filter,方便处理自己要处理的事情。
哪来的:由于Response.Filter 是一个Stream类,所以新类HttpResponseFilter需要继承自Stream,然后复写Write方法,实现自定义方法即可。

 

 

复写代码示例:

ExpandedBlockStart.gif
public
 
override
 
void
 Write(
byte
[] buffer, 
int
 offset, 
int
 count)
{
            
//
读出写的文字
            
byte
[] data 
=
 
new
 
byte
[count];
            Buffer.BlockCopy(buffer, offset, data, 
0
, count);
            
string
 inputText 
=
 Encoding.UTF8.GetString(data);
            
//
开始替换
            
if
 (replaceTextList 
!=
 
null
 
&&
 replaceTextList.Count 
>
 
0
)
            {
                
foreach
 (KeyValuePair
<
string
string
>
 values 
in
 replaceTextList)
                {
                    inputText 
=
 Regex.Replace(inputText, values.Key, values.Value, RegexOptions.Singleline);
                }
                replaceTextList.Clear();
            }
            replaceTextList 
=
 
null
;
            
//
将替换后的写入response
            
byte
[] newdata 
=
 Encoding.UTF8.GetBytes(inputText);
            filterStream.Write(newdata, 
0
, newdata.Length);
}

 

代码解读:

分三步走:
1:读取原文本内容
2:然后替换修改成自己的内容
3:写回去输出
注意事项:要注意网站编码是UTF8还是GB2312
重点是:我扩展了替换那一块,我用了一个Dictionary
<
string
, string
>
 
然后循环替换,当然支持正则,所以替换的原始文字和替换后的文字就对应上两个string上了
具体扩展应用见下篇文章。

 

扩展的小说明:

为了可扩展与方便大伙,我定义了一个抽象类,先实现了三个正则用于截取标题,说明,和关键字,具体应用还是见下文。

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/archive/2009/03/04/1403320.html

你可能感兴趣的文章
innodb_flush_method参数解析
查看>>
蛋白质结构模型和功能预测:Swiss-model工具的使用
查看>>
plink提取指定样本和指定SNP的数据(keep,extract函数)
查看>>
python算法
查看>>
多维数组的遍历性能
查看>>
CSS选择器
查看>>
服务器的操作系统和我们用的操作系统有什么区别? (转)
查看>>
jquery ui sortable 实现table,row的拖动。(Make Table Rows Sortable Using jQuery UI Sortable)...
查看>>
IntelliJ IDEA(九) :插件(转)
查看>>
Find Minimum in Rotated Sorted Array II
查看>>
HDFS-HA高可用
查看>>
实现一个 Variant
查看>>
php-final
查看>>
STL学习笔记--变易算法
查看>>
看一个人怎么样,要看他做的事和做事的方式
查看>>
Go开发之路(目录)
查看>>
SpringMVC----@CookieValue绑定请求中的Cookie值
查看>>
AsyncTask
查看>>
nginx和flask安装与配置
查看>>
java多线程(1)
查看>>