セッションが期限切れになった後、この問題に気付き始め、ボタンをクリックして 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 応答が見つかりませんでした。