Asp.net mvc 如何在登录后获取上一页
您好,我正在Asp.net Core中创建我的第一个项目,我需要在登录到用户的上一页后重定向用户。例如,如果他将观看页面“关于”,那么他将要登录,登录后,我需要他重定向到“关于”页面。 这是我在控制器中的代码Asp.net mvc 如何在登录后获取上一页,asp.net-mvc,asp.net-core,Asp.net Mvc,Asp.net Core,您好,我正在Asp.net Core中创建我的第一个项目,我需要在登录到用户的上一页后重定向用户。例如,如果他将观看页面“关于”,那么他将要登录,登录后,我需要他重定向到“关于”页面。 这是我在控制器中的代码 // // GET: /Account/Login [HttpGet] [Route("/Account/Login")] [AllowAnonymous] public IActionResult Login(string returnUrl =
//
// 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);
}
}
//POST:/Account/Login
[HttpPost]
[路由(“/Account/Login”)]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginViewModel模型,字符串returnUrl=null)
{
尝试
{
//奈斯米比特普里拉森酒店
if(_signInManager.IsSignedIn(用户))
返回ErrorActionResult(“用户已签名”);
//string var=Request.Headers[“Referer”];
string var=Request.Headers[“Referer”].ToString();
ViewData[“ReturnUrl”]=ReturnUrl;
if(ModelState.IsValid)
{
set lockoutOnFailure:真
var result=wait _signInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、lockoutOnFailure:true);
if(result.successed)
{
返回重定向到本地(returnUrl);
}
如果(结果IsLockedOut)
{
_logger.LogWarning(2,“someString”);
AddModelError(“用户名”,“someString”);
返回视图(“锁定”);
}
其他的
{
_logger.LogWarning(2,“someString”);
AddModelError(string.Empty,“无效密码或邮件”);
}
返回视图(模型);
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}
捕获(例外e)
{
返回ExceptionActionResult(e);
}
}
如果你还需要什么,或者你不明白我的意思,请向我询问详情。我很乐意为您提供任何帮助。您可以尝试下面的方法。假设About的操作链接如下所示
<a href="/Home/About">About</a>
请参见URL:
现在就重定向而言,下面是login.cshtml的代码。请注意,在发布表单时,我们是如何将returnURl作为匿名对象发送的
@using (Html.BeginForm("Login", "Account", new { ReturnUrl =
ViewBag.ReturnUrl }, FormMethod.Post)){
@*LOGIN PAGE RAZOR LOGIC*@
}
登录后控制器操作
[HttpPost]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
return RedirectToLocal(returnUrl);
}
[HttpPost]
公共异步任务登录(LoginView模型,字符串返回URL)
{
返回重定向到本地(returnUrl);
}
[HttpPost]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
return RedirectToLocal(returnUrl);
}