登录后如何获取上一页

时间:2017-08-01 18:57:12

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

您好我正在Asp.net Core中创建我的第一个项目,我需要在登录到他的上一页后重定向用户。例如,如果他将观看页面“关于”,那么他将要登录,登录后我需要他重定向到“关于”页面。 这是我在Controller中的代码。

 //
    // GET: /Account/Login
    [HttpGet]
    [Route("/Account/Login")]
    [AllowAnonymous]
    public IActionResult Login(string returnUrl = null)
    {
        try
        {
            if (_signInManager.IsSignedIn(User))
                _signInManager.SignOutAsync();


            ViewData["ReturnUrl"] = returnUrl;

            return View("Login");
        }
        catch (Exception e)
        {
            return ExceptionActionResult(e);
        }
    }

我尝试使用Request.Headers [“Referer”]。ToString();但问题是上一页是登录页面。我尝试将此方法放入// Get Login但我不知道如何将字符串发送到// Post Login

    // POST: /Account/Login
    [HttpPost]
    [Route("/Account/Login")]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
    {
        try
        {
            //Nesmi byt prihlasen
            if (_signInManager.IsSignedIn(User))
                return ErrorActionResult("User is already Signed");

          //  string var = Request.Headers["Referer"];
                string var = Request.Headers["Referer"].ToString();

            ViewData["ReturnUrl"] = returnUrl;
            if (ModelState.IsValid)
            {

                set lockoutOnFailure: true
                var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: true);
                if (result.Succeeded)
                {

                    return RedirectToLocal(returnUrl);
                }
                if (result.IsLockedOut)
                {
                    _logger.LogWarning(2, "someString");
                    ModelState.AddModelError("UserName", "someString");
                    return View("Lockout");
                }
                else
                { 
                        _logger.LogWarning(2, "someString");
                        ModelState.AddModelError(string.Empty, "Invalid Password or Mail");
                    }


                    return View(model);

            }

            // If we got this far, something failed, redisplay form
            return View(model);

        }
        catch (Exception e)
        {
            return ExceptionActionResult(e);
        }
    }

如果您需要其他任何内容或如果您不理解我,请向我询问详细信息。我会很高兴得到任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下内容。假设About的Action链接如下所示

<a href="/Home/About">About</a>

现在,当用户点击“关于”页面时,他将被重定向到下面的“登录页面”,因为它是一个GET请求,该URL将成为About page的链接,它将被捕获到{ {1}}

string returnUrl

请参阅网址

enter image description here

现在就重定向而言,下面是login.cshtml的代码。请注意我们在表单发布时如何发送 public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = returnUrl; return View(); }

returnURl as Anonymous Object

登录POST控制器操作

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = 
ViewBag.ReturnUrl }, FormMethod.Post)){
      @*LOGIN PAGE RAZOR LOGIC*@
}