我是MVC的新手,所以希望在以下方面提供帮助。
我有一个用于登录的AuthController,如果有returnUrl,我想返回该URL。似乎正在当前控制器(Auth)中寻找returnUrl(/ App / Trips),但如果我指定该控制器,它将正常工作。
关于RedirectToAction(returnUrl)为什么不起作用但RedirectToAction(“ Trips”,“ App”)起作用的任何想法吗?
我想知道它是否与映射有关?这就是我所拥有的:
在Startup.cs中映射
config.MapRoute(
name: "Default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "App", action = "Index" }
);
AuthController.cs
[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("Trips", "App");
}
else
{
//return RedirectToAction(returnUrl); // Doesn't work - tries to find /App/trips under /Auth
return RedirectToAction("Trips", "App"); // Works! goes straight to /App/trips
}
}
else
{
ModelState.AddModelError("", "Username or Password is incorrect");
}
}
return View();
}
returnUrl值,当上述运行=“ / App / trips”
通过时
return RedirectToAction("Trips", "App");
按预期进入http://localhost:12345/App/Trips
失败时间
return RedirectToAction(returnUrl);
答案 0 :(得分:2)
在RedirectToAction
中,我们需要传递Controller Name和Action Name作为参数
而Redirect()
仅需要网址
您需要做的就是
return Redirect(returnUrl);