2011-07-15 162 views
0

我創建一個IIS模塊,它在加載之前將文本附加到頁面上。當我轉到網址時,第一次加載頁面時效果很好。然而,在隨後的加載中,文本從不附加。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變量實際上是HttpContext.Current?它是模塊中的靜態字段嗎?何時/如何初始化?我的猜測是空的catch子句吞噬了所有的錯誤,並遵循這個想法,你很可能在_current上得到一個空引用。嘗試刪除try/catch以瞭解更多關於您的代碼的問題

+0

你是對的,_current是空的,這就是爲什麼發生這種情況。不知道爲什麼它是空的,關於如何解決它的任何想法? – Dexter

+0

好吧,你*有* HttpRequest請求= app.Context.Request;',你可以輕鬆地寫'var response = app.Context.Response;'然後'response.Output.Write(/ *你的東西* /)'。至於爲什麼它是空的......它可能在第一個請求(當它實際被初始化並且隨後正常運行)完成時設置爲空,因爲重新爲每個請求創建HttpContext(請求單例)。雖然如果別人知道的更好,請隨時糾正我:) – bottlenecked