zoukankan      html  css  js  c++  java
  • ASP.NET 截获服务器生成的将要发送到客户端的html的方法

    有时候我们需要在将服务器端生成的html发送带客户端之前对这些html进行操作,比如生成静态html加之保存、改变生成的html中的某些内容等等,那么久可以通过如下的方案解决。

    我总结了两种方式,个人觉得比较好用,一种是重写Page.Render()方法。一种是通过IHttpmodule来实现。

    1)这种方法适合控制某个页面,在.aspx.cs里面重写Render()方法即可,该方法提供一个HtmlTextWriter 类型参数,里面就包含了将要发送到客户端的内容,根据asp.net声明周期知道Render阶段是在load事件之后触发的,所以,这个方法很适合完成我们想要的效果。下面是一个简单的例子:

       1:      protected override void Render(HtmlTextWriter writer)
       2:      {
       3:          TextWriter tempWriter = new StringWriter();
       4:          base.Render(new HtmlTextWriter(tempWriter));
       5:          string str = tempWriter.ToString(); //这个str里面已经包含了html。
       6:   
       7:         //然后可以对这个字符串进行处理,比如保存、替换等等
       8:          writer.Write(str); //再将修改好的html发送到客户端
       9:      }

    2)这种方法在应用级控制,更适合需要对某一类页面进行处理,或者所有页面比较方面。要注册接口的PreSendRequestContent方法,下面为一个例子,有关IHttpmodule内容,本文不重复了:

       1:          void context_PreSendRequestContent(object sender, EventArgs e)
       2:          {
       3:              HttpApplication app = (HttpApplication)sender;
       4:              HttpContext context = app.Context;
       5:              string url = context.Request.RawUrl;
       6:              StringWriter wr = new StringWriter();
       7:              context.Server.Execute(url, wr);
       8:              string htmlCon = wr.ToString();//字符串htmlCon 已经包含了将要发送到客户端的html。
       9:   
      10:          }

    3) 通过替换Response.Filter也可以实现。

  • 相关阅读:
    javascript Literal
    [MQ]消息队列产品的功能整理
    [MQ]消息队列与企业服务总线的简单比较,MQ&ESB
    [问题记录.Dotnet]混用不同版本odp组件造成的System.MissingMethodException错误
    [问题记录.Oracle/odp.net]数据库变化通知(Database Change Notification)的使用限制
    .net 中的 json 处理
    负载均衡器/负载均衡硬件简单比较
    [笔记.zipkin]用Docker搭建zipkin-rabbitmq-mysql环境(C#客户端-zipkin4net)
    [问题记录]配置zipkin数据存储到mysql时报错Access denied for user 'root'@'172.17.0.1' (using password: NO)
    [问题记录.Centos7]解决安装teamviewer失败——提示依赖 libQt5WebKitWidgets.so.5()(64bit) >= 5.5
  • 原文地址:https://www.cnblogs.com/micua/p/3502722.html
Copyright © 2011-2022 走看看