【问题标题】:Where do I set the returnUrl path in ASP.NET MVC5?在哪里设置 ASP.NET MVC5 中的 returnUrl 路径?
【发布时间】:2018-01-17 08:47:02
【问题描述】:

早上好。我一直在寻找几个地方来解决这个问题。单击登录按钮时,会显示 ~/Home 的路径。设置这条路径的地方在哪里?可以指定路径吗?

 [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

    //
    // POST: /Account/Login
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // 계정이 잠기는 로그인 실패로 간주되지 않습니다.
        // 암호 오류 시 계정 잠금을 트리거하도록 설정하려면 shouldLockout: true로 변경하십시오.
        var result = await SignInManager.PasswordSignInAsync(model.ID, model.Password, model.RememberMe, shouldLockout: false);
        switch (result)
        {
            case SignInStatus.Success:
                return Redirect(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "잘못된 로그인 시도입니다.");
                return View(model);
        }
    }

【问题讨论】:

  • 显示您的登录视图
  • 不清楚您的要求。当用户导航到您需要身份验证的页面时,他们会自动重定向到Login,并且框架将returnUrl 的值设置为上一页,以便用户在登录成功时重定向回该页面.
  • 如果登录成功,是否意味着返回上一页?
  • 是的,这是默认行为。你想做什么?
  • 好吧,returnUrl 是一个默认参数,用于在访问该页面需要身份验证时重定向到上一页(假设您使用的是默认提供程序)。您可以使用Request.IsAuthenticated check 和RedirectToAction("actionname", "controllername", new { returnUrl = "url here" }),但这种方式不像默认行为那样可行。

标签: asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

在 RedirectToAction 中提供适当的控制器和动作名称:

switch (result)
        {
            case SignInStatus.Success:
                return Redirect(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("ActionName", "ControllerName");
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "잘못된 로그인 시도입니다.");
                return View(model);
        }

如果你想传递任何外部的东西,比如参数或 id 然后

return RedirectToAction("ActionName", "ControllerName",new { parameterToShowinURL = YourParameterOrVariableContainingValue });

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 2015-11-24
    • 2022-08-17
    • 2015-09-19
    • 2010-12-09
    • 2011-12-01
    相关资源
    最近更新 更多