【问题标题】:RedirectToRoute("Default") and Redirect(returnUrl) are returning '200' instead of '302'RedirectToRoute("Default") 和 Redirect(returnUrl) 返回 '200' 而不是 '302'
【发布时间】:2023-04-09 17:25:01
【问题描述】:

我正在尝试使用以下代码登录用户:

$("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");
        }
    }
}

我认为两个“重定向”操作结果都应该发出 302,但 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") });
            }
        }
    }
}

谢谢

戴夫

【问题讨论】:

    标签: jquery asp.net-mvc redirect


    【解决方案1】:

    您的浏览器会自动跟随重定向并请求重定向页面,然后返回200。运行一个代理(比如 Fiddler 或 Charles)来看看我的意思。

    我建议返回 200 状态,但使用 JSON 对象来指定您要重定向用户。

    此外,this answer 建议在这种情况下使用 status 278(显然是未使用的状态代码,这对我来说听起来很危险)。

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 2018-05-28
      • 1970-01-01
      • 2011-11-09
      • 2023-03-21
      • 2015-05-15
      • 2022-01-07
      • 2016-08-08
      • 1970-01-01
      相关资源
      最近更新 更多