ASP .NET 4.0 avec MVC 3.0
Voici donc la situation : Je suis nouveau dans MVC et ASP.NET et j'ai une application MVC qui utilise FormAuthentication avec ce qui suit dans le fichier web.config :
<authentication mode="Forms">
<forms loginUrl="~/LogOn/LogOn" timeout="2" requireSSL="true" />
</authentication>
Et ce qui se passe généralement, c'est que si un utilisateur navigue vers une page après l'expiration de la session, il est dirigé vers la page de connexion, ce qui fonctionne bien. Ce que j'essaie de faire, c'est d'empêcher le renvoi de cette page si la requête est un appel Ajax et d'envoyer à la place un objet JSON pour indiquer l'échec.
J'ai réussi à attraper la requête, à vérifier le type XMLHttp via la commande ci-dessous :
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();
}
}
}
Maintenant, j'ai testé que ma vérification de l'appel AJAX semble fonctionner, la seule chose qui est bizarre est qu'après la capture, la page de connexion est TOUJOURS envoyée en tant que réponse. J'ai vérifié toutes les utilisations des méthodes FormsAuthentication pour m'assurer que personne d'autre ne force l'envoi d'une page de connexion. FormsAuthentication.RedirectToLoginPage()
et j'ai vérifié, en fait, toutes les utilisations de FormsAuthentication et aucune ne fait quelque chose de bizarre. J'ai également vérifié la requête pour l'URL de la page de connexion (via GetRedirectUrl()
) et toujours rien.
Quelqu'un a-t-il une idée de ce qui pourrait être à l'origine de l'autoredirection ?