如何在异步任务方法中调用 RedirectToAction?
How to call RedirectToAction in asynchronous Task methods?
我正在使用 MVC aspnetcore dotnetcore 6.0
我使用 LoginController 进行授权。成功后我想将用户重定向到 HomeController。但是 RedirectToAction 不起作用。我的代码在这里:
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> UserLoginAsync(LoginRequestModel requestModel)
{
try
{
if (ModelState.IsValid)
{
LoginResponseModel loginResponseModel = new LoginResponseModel();
var res = _wrapperService.Post<LoginRequestModel, LoginResponseModel>(requestModel, "/api/auth/login");
var tokenRes = GetTokenInfo(res.Result.Data.Token);
HttpContext.Session.SetString("username", requestModel.Email);
var userIdentity = new ClaimsIdentity(tokenRes, "Login");
ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(claimsPrincipal);
return RedirectToAction("Index", "Home"); // I want to redirect this but it does not work.
return Ok(res.Result);
}
return BadRequest(ModelState);
}
catch (Exception e)
{
var errors = new HttpErrorViewModel()
{
Errors = new List<string>()
};
errors.Errors.Add(e.InnerException.Message);
return BadRequest(errors);
}
}
我的 Ajax 代码在这里:
function LoginWithMail() {
var inputs = {};
$("#form-login .input-login").each(function () {
inputs[$(this)[0].name] = $(this)[0].value;
});
$.ajax({
method: "POST",
url: "/Login/UserLogin/",
data: inputs,
dataType: 'json',
beforeSend: function () {
$("#Email").removeClass("border border-danger");
$("#Password").removeClass("border border-danger");
$("#LoginSpinner").show();
$("#loginResMessages").html("").removeClass();
},
success: function (res) {
console.log(res);
$("#LoginSpinner").hide();
},
error: function (xhr, status, error) {
$("#LoginSpinner").hide();
$("#loginResMessages").html("");
我重复一遍。我想在成功时重定向此代码。我尝试了很多我找到的解决方案,但都没有奏效。
请帮忙
您是否使用 ajax 发送了登录操作请求?这可能是个问题。
如果您使用 ajax 发送 post 请求,只需在 ajax 方法中处理响应。如果成功,用js把window位置改成home/index。
我正在使用 MVC aspnetcore dotnetcore 6.0
我使用 LoginController 进行授权。成功后我想将用户重定向到 HomeController。但是 RedirectToAction 不起作用。我的代码在这里:
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> UserLoginAsync(LoginRequestModel requestModel)
{
try
{
if (ModelState.IsValid)
{
LoginResponseModel loginResponseModel = new LoginResponseModel();
var res = _wrapperService.Post<LoginRequestModel, LoginResponseModel>(requestModel, "/api/auth/login");
var tokenRes = GetTokenInfo(res.Result.Data.Token);
HttpContext.Session.SetString("username", requestModel.Email);
var userIdentity = new ClaimsIdentity(tokenRes, "Login");
ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(claimsPrincipal);
return RedirectToAction("Index", "Home"); // I want to redirect this but it does not work.
return Ok(res.Result);
}
return BadRequest(ModelState);
}
catch (Exception e)
{
var errors = new HttpErrorViewModel()
{
Errors = new List<string>()
};
errors.Errors.Add(e.InnerException.Message);
return BadRequest(errors);
}
}
我的 Ajax 代码在这里:
function LoginWithMail() {
var inputs = {};
$("#form-login .input-login").each(function () {
inputs[$(this)[0].name] = $(this)[0].value;
});
$.ajax({
method: "POST",
url: "/Login/UserLogin/",
data: inputs,
dataType: 'json',
beforeSend: function () {
$("#Email").removeClass("border border-danger");
$("#Password").removeClass("border border-danger");
$("#LoginSpinner").show();
$("#loginResMessages").html("").removeClass();
},
success: function (res) {
console.log(res);
$("#LoginSpinner").hide();
},
error: function (xhr, status, error) {
$("#LoginSpinner").hide();
$("#loginResMessages").html("");
我重复一遍。我想在成功时重定向此代码。我尝试了很多我找到的解决方案,但都没有奏效。 请帮忙
您是否使用 ajax 发送了登录操作请求?这可能是个问题。
如果您使用 ajax 发送 post 请求,只需在 ajax 方法中处理响应。如果成功,用js把window位置改成home/index。