如何使用字符串RedirectToAction

时间:2019-01-07 11:58:36

标签: c# model-view-controller

我是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);

找不到页面错误http://localhost:12345/Auth/%2FApp%2Ftrips

1 个答案:

答案 0 :(得分:2)

RedirectToAction中,我们需要传递Controller Name和Action Name作为参数 而Redirect()仅需要网址

您需要做的就是

   return Redirect(returnUrl);