RedirectToRoute (“Default”) et Redirect (returnUrl) retournent ‘200’ au lieu de ‘302’

J’essaie d’utiliser le code suivant pour connecter les utilisateurs:

$("form").submit(function(event) { $.ajax({ type: "POST", url: $(this).attr("action"), data: $(this).serialize(), complete: function(XMLHttpRequest, textStatus) { if (XMLHttpRequest.status === 302) { // if they've successfully logged in, I redirect to their page window.location = XMLHttpRequest.getResponseHeader("Location"); } } }); return false; }); 

avec le code suivant sur le serveur pour gérer la publication:

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult LogOn(MyUser user) { if (ValidateLogOn(user.UserName, user.Password)) { if (Request.QuerySsortingng["ReturnUrl"] != null) { return Redirect(Request.QuerySsortingng["ReturnUrl"]); } else { return RedirectToRoute("Default"); } } } 

Je pensais que les deux résultats de l’action de redirection étaient supposés générer 302, mais la valeur XMLHttpRequest.status est toujours égale à 200. Y a-t-il quelque chose que je fais de travers?

EDIT: C’est ce qui a finalement fonctionné

 $("form").submit(function(event) { $.ajax({ type: "POST", url: $(this).attr("action"), data: $(this).serialize(), complete: function(xhr, textStatus) { var dataType = xhr.getResponseHeader("Content-Type"); if (dataType.indexOf("json") > -1) { window.location = JSON.parse(xhr.responseText).returnUrl; } if (dataType.indexOf("html") > -1) { $('#main').html(xhr.responseText); } } }); return false; }); 

avec ce qui suit sur le serveur:

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult LogOn(MyUser user, ssortingng returnUrl) { if (!ValidateLogOn(user.UserName, user.Password)) { return PartialView(); } else { user = (MyUser)Session["CurrentUser"]; if (user.IsPublic) { return Json(new { returnUrl = Url.RouteUrl("PublicRoute") }); } else { if (!ssortingng.IsNullOrEmpty(returnUrl)) { return Json(new { returnUrl = returnUrl.ToLower() }); } else { return Json(new { returnUrl = Url.RouteUrl("AdminRoute") }); } } } } 

Merci

Dave

Votre navigateur suit automatiquement la redirection et demande la page de redirection, qui renvoie 200 . Exécuter un proxy (comme Fiddler ou Charles) pour voir ce que je veux dire.

Je vous recommande de retourner un statut 200 , mais utilisez un object JSON pour indiquer que vous souhaitez redirect l’utilisateur.

De plus, cette réponse recommande d’utiliser l’état 278 (apparemment un code d’état non utilisé, ce qui me semble dangereux) dans ce scénario.