• 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也可以实现。

  • 相关阅读:
    475. Heaters
    69. Sqrt(x)
    83. Remove Duplicates from Sorted List Java solutions
    206. Reverse Linked List java solutions
    100. Same Tree Java Solutions
    1. Two Sum Java Solutions
    9. Palindrome Number Java Solutions
    112. Path Sum Java Solutin
    190. Reverse Bits Java Solutin
    202. Happy Number Java Solutin
  • 原文地址:https://www.cnblogs.com/micua/p/3502722.html
Copyright © 2020-2023  润新知