ASP.Core MVC RedirectToAction是在returnUrl前面附加控制器名称
本文关键字:控制器 前面 returnUrl Core MVC RedirectToAction 是在 ASP | 更新日期: 2023-09-27 18:05:18
我正在做一个ASP。. Net core, MVC 6应用。我有一个appcontroller作为我的初始控制器,如果一个用户试图去一个有[authorization]属性的操作,我重定向到我的AuthController进行登录,传入返回的returnUrl。一旦认证,我使用…返回RedirectToAction (returnUrl)。
在调试中,我可以看到returnUrl字符串被设置为/App/timessheets。但是,在浏览器地址栏中,它的地址是http://localhost:49940/Auth/%2FApp%2FTimeSheets。由于某些原因,它在returnUrl前面附加了控制器名称(Auth)。
这是我在AuthController
中的Login动作 [HttpPost]
public async Task<ActionResult> Login(LoginViewModel vm, string returnUrl)
{
if (ModelState.IsValid)
{
var signInResult = await _signInManager.PasswordSignInAsync(vm.Username, vm.Password, true, false);
if (signInResult.Succeeded)
{
if (string.IsNullOrWhiteSpace(returnUrl))
{
return RedirectToAction("Timesheets", "App");
}
else
{
return RedirectToAction(returnUrl);
}
}
else
{
ModelState.AddModelError("", "Username or password incorrect");
}
}
return View();
}
我可以在浏览器地址栏中手动输入http://localhost:49940/App/Timesheets并进入正确的视图。另外,如果我加上
returnUrl = String.Empty; //Test Only
在…行之前
if (string.IsNullOrWhiteSpace(returnUrl))
使其执行…
return RedirectToAction("Timesheets", "App");
重定向工作正常。所以它与传递"/Controller/Action"
格式的字符串变量有关,这是问题所在。
任何想法?
当您已经有一个完整的URL时,您应该返回一个Redirect
。当前,您正在执行RedirectToAction
,它将尝试重定向到当前控制器(Auth)下的操作。
if (signInResult.Succeeded)
{
if (string.IsNullOrWhiteSpace(returnUrl))
{
return RedirectToAction("Timesheets", "App");
}
else
{
return Redirect(returnUrl);
}
}
var redirect = RedirectToAction();
redirect.ActionName = "YourAction"; // or can use nameof("") like nameof(YourAction);
redirect.ControllerName= "YourCtrl"; // or can use nameof("") like nameof(YourCtrl);
return redirect;
我想我只是把问题描述写出来了,才发现问题所在。
我改变了…
return RedirectToAction(returnUrl);
……
return RedirectToAction(WebUtility.UrlEncode(returnUrl));
,现在工作正常。
:/