0

セッションが期限切れになった後、この問題に気付き始め、ボタンをクリックして UpdatePanel 内で Ajax ポストバックを実行しました。ASP は期限切れのセッションをキャッチし、ホームページにリダイレクトしますが、送信先の URL はエスケープされており、ASP は要求を拒否します。

URL: %2fDefault.aspx%3fReturnUrl%3d%252fMyPage.aspx%253fCurrentDate%253d2013-04-19%26CurrentDate%3d2013-04-19.

エラー:The request filtering module is configured to deny a request that contains a double escape sequence.

問題を絞り込むために、UpdatePanel の内外で Postbacks のテスト ケースをセットアップしました。

テスト.aspx:

<asp:UpdatePanel runat="server" ID="upTest">
    <ContentTemplate>
        <asp:LinkButton runat="server" ID="lnkAjaxPostbackTest" OnClick="PostbackTest">AJAX Postback Test</asp:LinkButton><br />
        <asp:LinkButton runat="server" ID="lnkAjaxPostbackRedirectTest" OnClick="PostbackRedirectTest">AJAX Redirect Test</asp:LinkButton>
    </ContentTemplate>
</asp:UpdatePanel>
<asp:LinkButton runat="server" ID="lnkPostbackTest" OnClick="PostbackTest">Postback Test</asp:LinkButton><br />
<asp:LinkButton runat="server" ID="lnkPostbackRedirectTest" OnClick="PostbackRedirectTest">Redirect Test</asp:LinkButton>

Test.aspx.cs

protected void PostbackTest(object sender, EventArgs e) {
   var x = 3;
}
protected void PostbackRedirectTest(object sender, EventArgs e) {
    Response.Redirect("~/Default.aspx");
}

結果 通常の (非 Ajax) ポストバックは、すべての場合 (セッションが期限切れになった場合でも) 正しく機能しました。ただし、AJAX リダイレクト テストは/%2fDefault.aspxセッションがアクティブなときに送信し、AJAX ポストバック テストは/%2fDefault.aspx%3fReturnUrl%3d%252fTest.aspxセッションの有効期限が切れたときに送信します。

では、なぜこれが起こっているのですか?おそらくjavascriptがリダイレクトを処理していて、それが実行されていませんdecodeURIComponentか? リダイレクトが発生する必要があることを示す HTTP 応答が見つかりませんでした。

4

1 に答える 1

0

犯人は、AjaxControlToolkit アセンブリの ToolkitScriptManager です。ASP で提供されている通常の ScriptManager に置き換えたところ、問題はすぐに解消されました。

要約: AjaxControlToolkit.ToolkitScriptManager + Ajax ポストバック + リダイレクト => 二重にエスケープされた Uris

于 2013-04-19T20:31:29.423 に答える