我正在尝试使用以下代码来记录用户:
$("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") });
}
}
}
}
由于
戴夫
答案 0 :(得分:1)
您的浏览器会自动关注重定向并请求重定向页面,然后返回200
。运行代理(如Fiddler或Charles)看看我的意思。
我建议返回200
状态,但使用JSON对象指定您要重定向用户。
此外,this answer建议在此方案中使用状态278
(显然是未使用的状态代码,这对我来说很危险)。