尝试从 API 控制器重定向时出现错误 302



重定向时,向我显示正在调用的页面并显示302错误。我如何处理这个问题,它允许我通过 API 方法重定向到页面,并在凭据错误时显示错误消息。我宁愿避免使用window.location.href因为传入重定向URL不起作用。

接口方法

[HttpPost]
[AllowAnonymous]
[Route("Login")]
public async Task<IActionResult> Login([FromForm] LoginViewModel model)
{
if (model.Username == "user" && model.Password == "password")
{
Redirect("/User/Index");
}
else return StatusCode(400, "Invalid user or password");
}

阿贾克斯呼叫

$("#loginBtn").on('click', function (e) {
e.preventDefault();
$.ajax({
url: '/api/Account/Login',
type: 'POST',
data: $('#loginForm').serialize()
})
.done(function (data) {
})
.fail(function () {
$('#errorMessage').append("Invalid username or password").show();
$('#errorMessage').removeAttr('id');
}
});
});


编辑: 从Athanasios Kataras的解释中,我决定改用错误消息。我想出了这个解决方案:
$("#loginBtn").on('click', function (e) {
e.preventDefault();
$.ajax({
url: '/api/Account/Login',
type: 'POST',
data: $('#loginForm').serialize()
})
.done(function (data) {
})
.fail(function () {
sessionStorage.setItem("error", "Error");
location.reload();
}
});
});
if (sessionStorage.getItem("error") != null) {
$('#errorMessage').html("Invalid username or password").show();
sessionStorage.removeItem("error");
}

您无法通过 XHR 请求重定向。当返回 302 时,浏览器将立即跟踪它并在新 url 上查找 ajax 响应。

如果是完整的回发而不是 xhr/ajax 请求,它将正确重定向。

在过去,您甚至看不到重定向,但现在它就在那里。

老实说,除了window.location.href之外,我没有看到其他方法。

也许,您可以使用它来获取状态,但是我已经检查了一下。可能是通过这种方式,您可以抓住 302 并妥善处理它。

$.ajax( url [, settings ] )
.always(function (jqXHR) {
console.log(jqXHR.status);
});

最新更新