2009-04-02 2 views
1

少し背景:高度にストライプ化されたASP.NET実装を使用して、軽量なcookielessデータベースバックアップユーザーセッションを作成しようとしています。このサイトのオーディエンスは、セルラーネットワーク経由で接続するモバイルユーザーであるため、ページサイズは非常に小さくする必要があります。私は、.NETセッション、viewstateなどを使用していないし、ほとんどのページにはほとんどすべてのサーバーコントロールが含まれています。ASP.NETページの出力を書き換えます

ページ要求の出力を処理できるようにするため、自分のセッション情報で応答内の内部リンクを変更できます。私は、cookielessセッションpreASP.NETを可能にするISAPIフィルタがあることを読んだ。それは基本的に私がアプリケーションの中で構築したいものです。

誰もこのようなことをしましたか?私はすでに他の理由で私のページベースのSystem.Web.UI.Pageクラスを控えています。私はここから何かできるはずです。このためHttpModuleをを使用してに

おかげ

答えて

1

HttpModulesを使用すると、出力を完全に制御できますが、もう少し簡単な方法がいくつかあります。

  1. Response.Filterのカスタムフィルタを作成します。多かれ少なかれStreamを作成してから、すべてのストリームを基になるストリームに送信してから変更します。ページのイベントをレンダリングし、文字列にすべてのあなたの内容を書き込み、そこにあなたの変更を行い

  2. をオーバーライド

    ...例えば...

//this is from memory, you might need to check it 
override void Render(HtmlTextWriter writer) { 

StringWriter html = new StringWriter(); 
HtmlTextWriter render = new HtmlTextWriter(html); 
base.Render(render); 
string output = html.ToString() 

//make your changes to output 
//output = ??? 

writer.Write(output); 

} 
+0

これはResponse.Filterです。これは私が探していたようだ。どうもありがとう! – Paul

+0

ありがとうございます、あなたは正しいです - 私はそれを修正します – Hugoware

1

ルック。途中で応答全体を処理することができます。

また、基本クラスで何かできることがあります。おそらく、PreRenderCompleteイベントでリンクを持つ可能性があるすべてのサーバー側コントロールを調べることができます。ただし、これはHTML <A>タグでは役に立ちません。