2017-09-22 8 views
0

同じIISインスタンスで複数のWebサイトをホストしているので、IISの設定でHTTP応答ヘッダー 'X-Frame-Options:DENY'を定義して、クライアント(およびクライアント) 。IISレスポンスヘッダーをオーバーライド

私は現在、電子商取引のWebサイトでWebフォームを使用しています。特定のURL(支払いプロバイダのコールバック)で「X-Frame-Options」レスポンスヘッダーを削除する必要があります。

HTTPモジュール(下のコードを参照)を書いて、それを私のeコマースWebサイトの 'web.config'に登録しましたが、コードは機能しますが、IISは私の実行後に応答ヘッダーを追加するようですHttpModule。

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

    public void Init(HttpApplication application) 
    { 
    application.PreSendRequestHeaders += new EventHandler(PreSendRequestHeaders); 
    } 

    private void PreSendRequestHeaders(object sender, EventArgs e) 
    { 
    HttpApplication application = sender as HttpApplication; 
    HttpContext context = application.Context; 

    string callbackDocumentName = "callback.html"; 

    if (callbackDocumentName != null) 
    { 
     if (!context.Request.RawUrl.ToLower().Contains(callbackDocumentName.ToLower())) 
     { 
     context.Response.Headers.Remove("X-Frame-Options"); 
     } 
    } 
    } 
} 

通常、「callbackDocumentNameは」「web.configファイル」から取得しますが、私は、例えば、それを単純化しましたさ。私は、Visual Studioと 'context.Response.Headers' は次のヘッダーが含まれていますが、ない 'X-フレーム・オプション' とデバッグを試してみました:

  • CacheControlを
  • のContent-Type
  • サーバー
  • X-AspNet-Version

ありがとうございます!

+0

が助けになるかもしれませんしてみてください、あなたのアプリケーションに送信される前であっても、あなたがそれをやった:https://blogs.msdn.microsoft.com/varunm/2013/ 04/23/remove-unwanted-http-response-headers/ – ediblecode

+0

あなたの早い返信をありがとう!私はすでにStackoverflowに投稿する前にこの記事を検討しました。悲しいことに、 'X-Frame-Options'には 'ALLOWALL'がないので、ヘッダーから削除する必要があります。変更するだけではありません。 –

答えて

0

応答を変更する場合は、応答が生成された後に行う必要があります。

現在のリクエストが

この

 public void Init(HttpApplication context) 
     { 
      context.PostRequestHandlerExecute += new EventHandler(this.ProcessResponse); 
     } 

     private void ProcessResponse(object sender, EventArgs e) 
     { 
      HttpContext context = ((HttpApplication)sender).Context; 
      //do whatever you want to the context 
      //context.Response.Headers.Remove 
      } 
     } 
+0

あなたの返信をありがとう!しかし、私はContext.ApplicationInstance.CompleteRequestを他の場所で使用しているので、PostRequestHandlerExecuteがバイパスされているため、私のためには機能しませんでした。私はEndRequestを試してみましたが、これはCompleteRequestによってトリガーされましたが、パイプラインのすべてのイベントが実行された後にIISが応答ヘッダーを追加したようですので、私のコードでX-Frame-Optionsを制御しなくてはなりませんIIS。 –

関連する問題