1

フィルター (PageFilter) を持つ HttpModule があります。Pag​​eFilter の Writer メソッドはページ要求ごとに 2 回呼び出されますが、残念ながら同じ結果にはなりません。

フィルターの考え方は、"" を見つけて、この前にテキスト/スクリプトを挿入することです。たくさんの小さなエラーを見つけて修正しましたが、このエラーは私を悩ませています...

PageFilter のコンストラクターは 1 回呼び出されますが、そのライター メソッドは要求ごとに 2 回呼び出されますか?

以下は PageFilter.Writer の内容です(2回実行されます)

string strBuffer = System.Text.UTF8Encoding.UTF8.GetString (buffer, offset, count); 

try 
{
    Regex eof = new Regex("</html>", RegexOptions.IgnoreCase);

    if (!eof.IsMatch(strBuffer))
    {
       //(1)
       responseHtml.Append(strBuffer);
    }
    else
    {
        //(2)
        responseHtml.Append (strBuffer);
        string  finalHtml = responseHtml.ToString ();
        Regex   re = null;

        re = new Regex ("</body>", RegexOptions.IgnoreCase);
        finalHtml = re.Replace(finalHtml, new MatchEvaluator(lastWebTrendsTagMatch));
        // Write the formatted HTML back
        byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes (finalHtml);

        responseStream.Write(data, 0, data.Length);       

       }
    }
    catch (Exception ex)
    {
       Logging.Logger(Logging.Level.Error, "Failed writing the HTML...", ex);
    }

メソッドが最初に実行されると、ケース (1) が実行され、2 番目のケース (2) が実行されます...これは私が望むものではありません。

4

2 に答える 2

1

Write メソッドは、1 つのページに対して複数回呼び出すことができます。HttpWriter オブジェクトは、データをまとめて、出力ストリームに書き込みます。HttpWriter がデータのチャンクを送信するたびに、応答フィルターの Write メソッドが呼び出されます。

1種類の解決策についてはこれを参照してください...

  1. HttpResponse.Filter を複数回書き込む

responseStream.Write(data, 0, data.Length); の代わりに responseStream.Write(data, 0, data.Length-1); を試してください。

これが役に立つことを願っています。

于 2008-12-11T10:55:09.460 に答える
0

これらの「イベント」は、1 ページのリクエスト中に発生します。

isAspx = true og /_layouts/ が見つかりません (ファイルが .aspx であり、URL に /_layouts/ が含まれていないことを確認します)

呼び出された PageFilter コンストラクター

Writer メソッドが開始されました...

eof (regex): (マッチング用に作成された正規表現を含む)

!eof.IsMatch(strBuffer): (正規表現と一致しませんでした)

ライター メソッドが開始されました... (ライターを呼び出す 2 回目)

eof (regex): (マッチング用に作成された正規表現を含む)

正規表現が開始されました (正規表現と一致)

re (正規表現): (スクリプトを挿入するために必要な body タグを見つけました)

ScriptInclude = true (スクリプトを含める必要があることをアプリに伝える web.config キーを見つけました)

US スクリプトを使用 (これも Web 構成キーに基づいて、US バージョンのスクリプトを使用しました)

問題は次のとおりです。私の開発環境では、ライターが 2 回実行され、上記のシーケンスとスクリプトが含まれてしまいます。私のテスト展開では、ライターが 2 回実行され、最終的にスクリプトが含まれません...

Writer を 2 回呼び出すことは避けたいのですが、テスト展開にスクリプトを含めたいと思っています。

于 2008-12-11T12:29:24.247 に答える