1
我嘗試使用下面的代碼登錄用戶:RedirectToRoute(「默認」)和重定向(RETURNURL)正在返回「200」,而不是「302」
$("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;
});
用下面的代碼上服務器處理後:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(MyUser user)
{
if (ValidateLogOn(user.UserName, user.Password))
{
if (Request.QueryString["ReturnUrl"] != null)
{
return Redirect(Request.QueryString["ReturnUrl"]);
}
else
{
return RedirectToRoute("Default");
}
}
}
我想這兩個「重定向」操作的結果被認爲發行302S但XMLHttpRequest.status值始終爲200。有什麼我做錯了嗎?
編輯:這是最終的工作
$("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;
});
與服務器上執行以下操作:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(MyUser user, string 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 (!string.IsNullOrEmpty(returnUrl))
{
return Json(new { returnUrl = returnUrl.ToLower() });
}
else
{
return Json(new { returnUrl = Url.RouteUrl("AdminRoute") });
}
}
}
}
感謝
戴夫