asp.net截獲伺服器產生的將要發送到用戶端的html的方法

來源:互聯網
上載者:User

有時候我們需要在將伺服器端產生的html發送帶用戶端之前對這些html進行操作,比如產生靜態html加之儲存、改變產生的html中的某些內容等等,那麼久可以通過如下的方案解決。

我總結了兩種方式,個人覺得比較好用,一種是重寫Page.Render()方法。一種是通過IHttpmodule來實現。

1)這種方法適合控制某個頁面,在.aspx.cs裡面重寫Render()方法即可,該方法提供一個HtmlTextWriter 型別參數,裡面就包含了將要發送到用戶端的內容,根據asp.net聲明周期知道Render階段是在load事件之後觸發的,所以,這個方法很適合完成我們想要的效果。下面是一個簡單的例子:

    protected override void Render(HtmlTextWriter writer)
    {
        TextWriter tempWriter = new StringWriter();
        base.Render(new HtmlTextWriter(tempWriter));
        string str = tempWriter.ToString(); //這個str裡面已經包含了html。

       //然後可以對這個字串進行處理,比如儲存、替換等等
        writer.Write(str); //再將修改好的html發送到用戶端
    }

2)這種方法在應用級控制,更適合需要對某一類頁面進行處理,或者所有頁面比較方面。要註冊介面的PreSendRequestContent方法,下面為一個例子,有關IHttpmodule內容,本文不重複了:

        void context_PreSendRequestContent(object sender, EventArgs e)
        {
            HttpApplication app = (HttpApplication)sender;
            HttpContext context = app.Context;
            string url = context.Request.RawUrl;
           
            StringWriter wr = new StringWriter();
            context.Server.Execute(url, wr);
            string htmlCon = wr.ToString();//字串htmlCon 已經包含了將要發送到用戶端的html。

        }

3) 通過替換Response.Filter也可以實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.