2017-06-23 8 views
1

私はこのモジュールを持っている:私はレスポンスヘッダが既に送信されたいくつかのケースで書いたもの。このことからHTTPヘッダーが既に送信されている場合

public class SecureCookieModule : IHttpModule 
{ 
    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     context.EndRequest += OnEndRequestHandlerExecute; 
    } 

    private void OnEndRequestHandlerExecute(object sender, EventArgs e) 
    { 
     if (!AppConfig.MachineAppSettingsBool("setSecureCookiesForSecureConnections")) 
     { 
      return; 
     } 

     try 
     { 
      HttpApplication app = sender as HttpApplication; 

      if (app.Request.IsReallySecureConnection()) 
      { 
       foreach (string s in app.Response.Cookies.AllKeys) 
       { 
        var cookie = app.Response.Cookies[s]; 

        if (cookie.Secure == false) 
        { 
         cookie.Secure = true; 
         app.Response.Cookies.Add(cookie); 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      LogManager.GetLogger("SecureCookieModule").Error("Exception while processing http module. Ex: {0}", ex); 
     } 
    } 
} 

を、ので、それらを変更することはできませんし、例外がこのためにスローされます。私が見逃しているのは、これが起こり、その理由は何ですか?なぜ "OnEndRequestHandlerExecute"イベントを実行する前に送信されるのか、そうでない場合にはなぜですか?このような状況の原因となるルールは何ですか?

ありがとうございます!

+2

要求ハンドラは、出力ストリームに書き込む場合、これらは***先頭に行く***ヘッド*** ERSに行くように、あなたは**、クッキーを設定することはできません*ストリームの*。リクエストハンドラが起動した後**これを行うと、失敗することになります。私はこの作品がまったく驚いています。 – spender

+0

したがって、ハンドラがレスポンスに直接書き込むと、すべてのヘッダが送信されます。私はそれを二重にチェックして、これはどのように動作するのですか?ありがとう。 –

答えて

1

レスポンスがバッファリングされておらず、ヘッダーがすでに送信されている場合は、終了要求イベント中にヘッダーが変更されている可能性があります。上

  1. 電源を入れresponse buffering:これに対処するには

    は、あなたは選択肢を持っています。そうすれば、あなたの現在のコードがバッファ内のヘッダを変更できるようになります(大きなドキュメントを扱う場合は、これは素晴らしい考えではありません)。

    Response.BufferOutput = true; 
    
  2. 代わりのEndRequestを扱う、代わりにPreSendRequestHeadersを扱います。このイベントは、ヘッダーが応答に書き込まれる前に発生することが保証されています。

    public void Init(HttpApplication context) 
    { 
        context.PreSendRequestHeaders += OnEndRequestHandlerExecute; 
    } 
    
+0

context.PreSendRequestHeadersは完全に私の作品です。ありがとう。 –

関連する問題