2011-12-30 14 views
1

私は応答に追加のマークアップを挿入しようとしていますが、期待通りに出力しません。例えばHTTPModuleでhtmlタグを閉じる前にHTMLを挿入する方法

次のコードが出力されます:

... </html>CONTENT 

private void OnEndRequest(Object source, EventArgs e) 
{ 
    HttpApplication application = (HttpApplication)source; 
    HttpContext context = application.Context; 
    context.Response.Write("CONTENT"); 
} 

が、私は右の決算htmlタグ

... CONTENT</html> 

これを達成するための方法上の任意のアイデアを前に出力するコンテンツがしたいですか?

+0

なぜHttpModuleの選択?なぜページを拡張/上書きしないのですか?基本的には、ページをオーバーライドするのと同じくらい簡単にこれを達成するとは思えません。なぜなら、レンダリングモジュールの後にモジュールがASP.NETスタックにロードされていることを確認しなければならないからです。 '動詞'(HttpHandlerを参照してください)、そしてRegex =>点に挿入します。一方、ページでは、base.RenderEndTagを呼び出す前に、HtmlTextWriterにコンテンツを書き込むRenderEndTagをオーバーライドできます。 –

+2

私はページを所有していないためです。私はasp.netアプリケーションで使用できるプラグインを書いていますので、ページを上書きするのと同じくらい単純ではありません:) – Fixer

+0

@Fixer、問題を解決しましたか?私は同様のことをしましたが、EndRequest中にStreamを書き直す際に問題が発生しました。あなたはどのように説明したコードを投稿できますか?ありがとう – user449689

答えて

5

HttpContext.Response.Filterを使用してください。

チェックこのMSDNのドキュメントのページ:この非常に古い資料では、この、あまりにも明確にすべき

要約HttpContext.Current.Response.Filterに入っている元のものをラップするStream実装を作成する必要があります。

文書の一部にHTMLを挿入するには、バイトコードを文字列に変換し、コード行全体にある場合はString.IndexOfまたは正規表現を使用する必要があります。

その後、取得した文字列を連結、変更または置換し、元のデフォルトの応答フィルタに入っているラップされたストリームに置きます。