ASP.NET4.0とMVC3.0
状況は次のとおりです。MVCとASP.NETを初めて使用し、web.configでFormAuthenticationを使用するMVCアプリケーションを使用しています。
<authentication mode="Forms">
<forms loginUrl="~/LogOn/LogOn" timeout="2" requireSSL="true" />
</authentication>
また、通常は、セッションの有効期限が切れた後にユーザーがページに移動すると、ログオンページに移動します。これは正常に機能します。私がやろうとしているのは、リクエストがAjax呼び出しの場合にそのページが返送されないようにし、代わりに失敗を示すためにJSONオブジェクトを返送することです。
以下を介してXMLHttpタイプをチェックし、リクエストをキャッチするところまで到達しました。
void MvcApplication_AuthenticateRequest(object sender, EventArgs e)
{
if (s_identityProvider == null)
return;
IClaimsPrincipal principal = GetClaimsPrincipal();
Context.User = principal;
if (principal != null)
ClaimProvider.CheckAndPopulateRoles(principal);
else
{
if (Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
Context.Response.Write( "<?xml version='1.0' encoding='ISO-8859-1'?>"+
"<note>"+
"</note>";
}
else
{
FormsAuthentication.SignOut();
}
}
}
今、私はAJAX呼び出しのチェックが機能しているように見えることをテストしました。奇妙なのは、キャッチ後、ログインページがまだ応答として送信されることだけです。私はFormsAuthenticationメソッドのすべての使用をチェックして、他の誰も強制していないことFormsAuthentication.RedirectToLoginPage()
を確認し、実際、FormsAuthenticationのすべての使用をチェックし、奇妙なことをしている人はいません。ログインページのURLのクエリ(経由GetRedirectUrl()
)も確認しましたが、まだ何もありません。
誰かが自動リダイレクトを何をするのか考えていますか?