編集:問題は最初のコードだけに関係するものではなかったため、関連のないコード/説明を削除しました。
多くの Ajax 呼び出し (jqGrid など) とフォーム認証を使用する MVC3 ベースのアプリケーションがあります。また、ほとんどの場合、Ajax で呼び出す特定のコントローラー/アクションで [Authorize] 属性を使用します。「このページは適切にリダイレクトされていません」または「このページにはリダイレクト ループがあります」というエラーが表示されることがよくあります。
これをフィドラーでチェックアウトしました。ユーザーとしてログインし、認証が必要なページにアクセスしようとすると、アカウント/ログオンにリダイレクトされ、無限ループに陥ることがあります。これは通常、Ajax 呼び出しで Authorize 属性を持つコントローラー/アクションを呼び出しているときに発生します。アプリケーションは、アカウント/ログオンに 302 リダイレクトを送信しているようです。アカウント/ログオンの呼び出しは、それ自体にリダイレクトされるようです。また、Fiddler の textView は次のように表示されます。
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/LogOn">here</a>.</h2>
</body></html>
Global.asax ファイルに次のものがあります
protected void Application_EndRequest()
{
var context = new HttpContextWrapper(this.Context);
//if we are an ajax request and forms authentication caused a 302, then we actually need to do a 401
if (System.Web.Security.FormsAuthentication.IsEnabled && context.Response.StatusCode == 302 && context.Request.IsAjaxRequest())
{
context.Response.Clear();
context.Response.StatusCode = 401;
}
}
そして、これは私のメインのレイアウトページにあります
<script type="text/javascript">
$(document).ajaxError(function (xhr, props) {
if (props.status == 401) {
location.reload();
}
});
</script>
フォーム認証の web.config 設定にはこれがあります
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880"/>
</authentication>
リダイレクトは頻繁に開始され、同じコントローラー/アクションでもありません。かなりランダムに見えます。ユーザーの Cookie の有効期限が切れていて、何らかの理由でこの問題を引き起こしているのか、それともアプリケーション プールのリサイクルの問題なのかはわかりません。これを回避する方法についての提案は大歓迎です。ここ数日、これに苦労しているので、専門家からの助けは素晴らしいものになるでしょう. ありがとうございました