2009-02-27 7 views
2

私は、古典的なパイプラインモードでうまく動作するFacebookからの認証を処理するためのHTTPモジュールを持っています。IIS - 統合パイプラインモードでの既定のドキュメントの別の処理?

統合パイプラインモードでは、既定のドキュメントに対して追加のパススルーが発生しているため、モジュールが失敗しています。私たちは、(Facebookからの)リクエストを見て、私たちのアプリにアクセスするユーザーを検索して検証します。最初の要求は正常に認証されますが、の2番目の要求が表示されます。要求には投稿されたフォーム変数がないため、認証が失敗します。

統合パイプラインモードで

、 "/" 収率行の2 AuthenticateRequestsのHTTP要求:

  1. AppRelativeCurrentExecutionFilePath = "〜/"
  2. 要求AppRelativeCurrentExecutionFilePath =「〜/デフォルト要求.aspx "

この2番目の要求はすべてのフォーム値を失うため、認証に失敗します。古典的なモードでは、2番目の要求だけが発生し、フォームの値は保持されます。

ここで何が起こっているのですか?

更新:IISのモジュール通知からのトレースのイメージです。私のモジュールFBAuthはAUTHENTICATE_REQUESTを何度も見ていることに注意してください(私は認証用に2つ、認証後に1つを期待していますが、4つあります)。

Events raised multiple times

私は繰り返しこれらのイベントを発生しません同じコードを実行している(Vistaの)ボックスを見つけたので、私は、これはモジュール/フィルタ構成とは何かを持っていると信じて始めている - それは動作します予想通り。私は違いが何であるか把握しようとしています...

ありがとう! トム

DefaultHttpHandlerがサポートされていません

答えて

0

アプリケーション がDefaultHttpHandlerから派生することDefaultHttpHandlerまたはハンドラ を使用している場合は、DefaultHttpHandlerのサブクラス に頼る ので、アプリケーションが要求をサービスする ことができなくなり、 それはないだろう正しく機能します。 統合モードでは、 から派生したハンドラDefaultHttpHandlerは、 の処理を 処理のIISに戻すことができず、代わりに 要求されたリソースを静的ファイルとして処理します。 統合モードでは、 DefaultHttpHandlerを使用する必要がなく、 を使わずにすべての要求に対してASP.NETモジュール を実行できます。

回避策

変更 パスに代わり DefaultHttpHandler派生ハンドラをすべて 要求にASP.NETをマップするために ワイルドカードマッピングを使用して、使用するのでは、すべての要求のための要求処理 を実行するために モジュールを使用するようにアプリケーション要求はIISに返されます。

Hmmm、またはこれが問題になる可能性があります。初期の要求 処理段階で

ASP.NETモジュールが表示されます前に予め を必要とするリソースのために匿名の要求 を見 BeginRequestイベントで実行されているモジュールが含まASP.NET、 に入るIISによって を拒否された可能性が要求 認証ASP.NETモジュールは、 を任意のパイプラインステージで実行できます。これらのステージは、ネイティブIISモジュールで使用できる です。このため は、 以前 に認証段階前にASP.NETかもしれ 実行ASP.NETモジュールを入力するか、他の 段階( は、認証が必要なリソースのためのような 匿名の要求を)拒否された可能性があることを要求します。この動作は、 すべての要求でASP.NET モジュールがIISを拡張できるようにするために、設計上、 です。

が要求 処理中に、後に拒否することができるリクエストを見てから起こる 任意のアプリケーション固有の問題を回避するための回避策

変更アプリケーションコード。これは、 モジュールを変更して、 要求処理中に後で発生するパイプライン イベントにサブスクライブすることを伴うことがあります。 http://learn.iis.net/page.aspx/381/aspnet-20-breaking-changes-on-iis-70/

+0

私はこれらの問題に遭遇しているとは思わないが、素晴らしいリンクです。私はハンドラではなくモジュールで作業しています。監視しているイベントは認証イベントです。これは2回見ている理由を説明していますが、なぜhttp情報が失われたのか説明しません(例:form vars)。 –

1

ソリューションを見つけましたか?私はApplication_BeginRequestの最後に次のコードを追加しました:

if (Request.RawUrl.TrimEnd('/') == HostingEnvironment.ApplicationVirtualPath.TrimEnd('/')) 
    Server.Transfer(Request.RawUrl+"Default.aspx", true); 
関連する問題