我正在开发 ASP.Net core、MVC 6 应用程序。我有一个 AppControler 作为我的初始控制器,如果用户尝试转到具有 [Authorize] 属性的操作,我会重定向到我的 AuthController 进行登录,并传入 returnUrl 进行返回。经过身份验证后,我使用... return RedirectToAction(returnUrl)。
在调试中,我可以看到 returnUrl 字符串设置为 /App/Timesheets。但是,在浏览器地址栏中,它的地址为http://localhost:49940/Auth/%2FApp%2FTimeSheets。由于某种原因,它在 returnUrl 前面附加了控制器名称 (Auth)。
这是我在 AuthController 中的登录操作
[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/应用程序/时间表在浏览器地址栏中输入并转到正确的视图。另外,如果我添加
returnUrl = String.Empty; //Test Only
行前...
if (string.IsNullOrWhiteSpace(returnUrl))
使其执行该行...
return RedirectToAction("Timesheets", "App");
重定向效果很好。所以这与传入字符串变量有关"/Controller/Action"
格式就是问题所在。
有任何想法吗?