2011-07-15 8 views
0

ロードする前にページにテキストを追加するIISモジュールを作成します。 URLに行くと、ページが初めて読み込まれるときに完璧に動作します。その後のロードでは、テキストは一度も追加されません。IIS7モジュールは初回のみ動作しますか?

これを解決する方法についてのご意見はありますか?

== CODE ==

ここに私のweb.configです:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <compilation debug="true" /> 
    </system.web> 
    <system.webServer> 
     <modules> 
      <add name="MIModule" type="MI.MyModule, MI" /> 
     </modules> 
     <caching enabled="false" enableKernelCache="false" />  
    </system.webServer> 
</configuration> 

いくつかのモジュールコード:

public void context_PreRequestHandlerExecute(Object source, EventArgs e) 
     { 
      HttpApplication app = (HttpApplication)source; 
      HttpRequest request = app.Context.Request; 

      string pageContent = app.Response.Output.ToString(); 

      string useragent = "HI!<br />" + pageContent + "<hr />" ; 

      try 
      { 
       _current.Response.Output.Write(useragent); 
      } 
      catch 
      { 
      } 
     } 

と残りのコード:

private HttpContext _current = null; 

     #region IHttpModule Members 

     public void Dispose() 
     { 
      throw new Exception("Not implemented"); 
     } 

     public void Init(HttpApplication context) 
     { 
      _current = context.Context; 

      context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute); 
     } 

     #endregion 
+0

ページの前にロードすると、ハンドラではなくモジュールのように聞こえます。いくつかのコードを投稿できますか? – bottlenecked

+0

@bottlenecked - 申し訳ありませんが、正しいです、モジュールはハンドラではありません。私はいくつかのコードを添付しました。 – Dexter

答えて

2

_current変数は実際には01ですか??あなたのモジュールの静的フィールドですか?それはいつ/どのように初期化されますか?私の推測では、空のcatch節がすべてのエラーをゴブリングし、その考えに従えば、おそらく_currentに対してヌル参照を取得する可能性があります。 try/catchを削除して、コードの問題の詳細を確認してください。

+0

あなたは正しいですが、_currentはnullなので、それは起こっているのです。なぜそれがnullであるか分からない、それを修正する方法に関する任意のアイデア? – Dexter

+0

あなたは 'HttpRequest request = app.Context.Request;'を持っていますので、 'var response = app.Context.Response;'と 'response.Output.Write(/ *あなたのもの) * /) '。なぜそれがnullであるかについては、HttpContextが新しいリクエスト(リクエストシングルトン)ごとに作成されるため、最初のリクエスト(実際に初期化され、その後正常に実行される)の後にnullに設定される可能性があります。他の誰かがよく知っている場合でも、私を修正するために自由に感じてください:) – bottlenecked

関連する問題