3

問題

IIS7 Webサイトのデフォルトページから(UpdatePanelコントロールを使用して)AJAX部分更新要求を行おうとすると、失敗します。更新されるhtmlを返す代わりに、ページ全体を返します。これにより、MSAJAXが発生します。解析のたわごとを投げるJavascript。

疑わしい原因

原因を2つの問題に絞り込みました。特定のカスタムhttpモジュールを登録しているときにデフォルトページにAJAXリクエストを送信することです。http:// localhostへの部分的なレンダリング要求は失敗しますが、http://localhost/default.aspxへの部分的なレンダリング要求は正常に機能します。また、カスタムHttpModuleで次の行を削除した場合:

_application.PreRequestHandlerExecute += OnPreRequestHandlerExecute;

AJAX部分レンダリングは正しく機能します。Wierdハァッ?

もう1つの奇妙なこと... trace.axdを見ると、部分レンダリング要求が失敗すると、1つの部分レンダリング要求に対して2つのPOST要求がログに記録されることがわかります。1つはdefault.aspxページが正常に実行されます(トレース情報などpage_loadがログに記録されるため)が、コンテンツは生成されず、実際には実行されていないように見える(トレース情報はログに記録されない)がコンテンツを生成する(HTTP_CONTENT_LENGTHが0より大きい)秒。

助けてください! HTTPモジュールまたはMSAJAXHttpモジュールについて十分な知識を持っている人が、なぜこれが発生しているのかを説明できれば、私は非常に感謝しています。現状では、明らかな回避策は、リクエストのURLが「/」の場合にdefault.aspxにリダイレクトすることですが、これが発生している理由を本当に理解したいと思います。

4

1 に答える 1

1

まず、PreRequestHandlerExecute は、HTTP ハンドラーが実行される直前です。

次に、IIS7 で HttpModules を使用して Web サイトをホストする場合は、統合パイプライン モードで Web サイトを実行することをお勧めします。また、web.config の HttpModules タグを system.webServer モジュール セクションに移動する必要があります。

たとえば、次のように PreRequestHandlerExecute のハンドラーを変更した場合:

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

    if(  something-happened  )
         context.Handler = null;
}

おっしゃる通りの結果になります。

ハンドラーをデフォルト以外に設定すると、ASP.Net は現在の要求に対して責任を負いません。

各リクエストは 1 つの HttpHandler のみを持つことができることに注意してください。

于 2011-06-23T17:43:18.060 に答える