2

デフォルトのドキュメント(index.aspx)に転送されるファイル名なしで'/'URLに投稿しているasp.netWebフォームがあります。マネージドパイプラインモードでアプリプール(.net v4.0)を実行している場合Classic、フォームの値は受信ページで利用できます。モードで実行している場合Integrated、フォームの値はページで使用できません。

デフォルトのドキュメントを使用するURLに投稿するときに、統合モードでフォームコレクションを維持するにはどうすればよいですか?

'/index.aspx'に直接投稿する場合、リクエストは1つだけで、フォームの値は保持されます。
'/'に投稿する場合、2つのリクエストがあります。1つは、によって処理されていると思います。もう1つDefaultDocumentModuleは、ページクラス(ASP.index_aspx)によって処理されます。

統合モードで2番目の要求を処理している別のハンドラー/モジュールがありますが、これを識別できません。

Application_EndRequestイベント中にそれを特定しようとしています:

void Application_EndRequest(object sender, EventArgs e)
{
    HttpApplication app = ((HttpApplication)sender);
    int fieldCount = Request.Form.Count; // there are 5 fields in my POST
    var handler = app.Context.Handler;
}

結果:

役職 '/'

  • クラシックモードEndRequest1
    ハンドラー:ASP.index_aspx(System.Web.UI.page)
    fieldCount:5

  • クラシックモードEndRequest2
    ハンドラー:System.Web.DefaultHttpHandler
    fieldCount:5

フォームコレクションページで利用できます。

  • 統合モードEndRequest1
    ハンドラー:ASP.index_aspx(System.Web.UI.page)
    fieldCount:0

  • 統合モードEndRequest2
    ハンドラー:null
    fieldCount:5

フォームコレクションページで利用できません。

2番目のリクエストを処理しているネイティブモジュール/ハンドラーはどれですか?

**アップデート: **

フォームコレクションを失った理由の答えを見つけました。「IIS7またはIIS7.5統合モードの既定のドキュメントではイベントハンドラーが発生しない可能性があります」。そこでFormControlAdapter与えられた解決策はうまく機能しています。

ただし、リクエストを処理し、投稿されたフォームコレクションを削除しているモジュール/ハンドラーを特定することはできませんでした。疑っExtensionlessUrlHandler-Integrated-4.0たが確認できなかった。イベントを使用してもApplication_EndRequest、モジュールに関する情報は提供されませんでした。また、AdvancedLoggingはモジュールパイプラインに関する情報も提供しません。

4

0 に答える 0