ASP.NET 截获服务器生成的将要发送到客户端的html的方法

有时候咱们须要在将服务器端生成的html发送带客户端以前对这些html进行操做,好比生成静态html加之保存、改变生成的html中的某些内容等等,那么久能够经过以下的方案解决。 css

我总结了两种方式,我的以为比较好用,一种是重写Page.Render()方法。一种是经过IHttpmodule来实现。 html

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内容,本文不重复了: app

   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也能够实现。asp.net

相关文章
相关标签/搜索