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

相關文章
相關標籤/搜索