Asp.net mvc 如何在用户登录后重定向他/她刚从何处来?
我正在构建一个电子商店web应用程序。作为一个过程,将有一些操作需要用户首先进行身份验证,然后才能执行进一步的步骤。默认情况下,在ASP.Net identity中,当用户登录时,他/她将被重定向到主控制器的索引操作,这不是我想要的。我想重定向用户的来源。有什么想法吗? 这是我的控制器:Asp.net mvc 如何在用户登录后重定向他/她刚从何处来?,asp.net-mvc,identity,Asp.net Mvc,Identity,我正在构建一个电子商店web应用程序。作为一个过程,将有一些操作需要用户首先进行身份验证,然后才能执行进一步的步骤。默认情况下,在ASP.Net identity中,当用户登录时,他/她将被重定向到主控制器的索引操作,这不是我想要的。我想重定向用户的来源。有什么想法吗? 这是我的控制器: [AllowAnonymous] public ActionResult Login(string returnUrl) { ViewBag.Return
[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);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(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("", "Invalid login attempt.");
return View(model);
}
}
[AllowAnonymous]
公共操作结果登录(字符串返回URL)
{
ViewBag.ReturnUrl=返回URL;
返回视图();
}
//
//POST:/帐户/登录
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginView模型,字符串返回URL)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
//这不会将登录失败计入帐户锁定
//要使密码失败触发帐户锁定,请更改为shouldLockout:true
var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false);
开关(结果)
{
案例标志状态成功:
返回重定向到本地(returnUrl);
案例标志状态锁定输出:
返回视图(“锁定”);
案例标志状态。要求验证:
return RedirectToAction(“SendCode”,new{ReturnUrl=ReturnUrl,RememberMe=model.RememberMe});
案例信号状态故障:
违约:
AddModelError(“,”登录尝试无效“);
返回视图(模型);
}
}
我正在使用ASP.NETMVC5标识
默认情况下,在ASP.Net identity中,当用户登录时,他/她将
已重定向到主控制器的索引操作,该操作不可用
我想要什么。我想重定向用户的来源
从
这一假设并不完全正确。请求的行为实际上是默认行为
如果查看登录操作(HTTPGET),您会注意到它有一个returnUrl
参数。当401未经授权的状态代码更改为302重定向到登录路径时,OWIN中间件将填充该代码returnUrl
vallue被分配给ViewBag.returnUrl
,该值稍后用于附加此值Login postback URL(Login.cshtml视图):
在登录(HTTPPOST)操作中,您可以注意到相同的returnUrl参数,该参数用于在登录成功时将用户重定向到此url:
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
例如,如果您将Authorize属性放在Home controller中的About action上,并通过在浏览器中键入
http://localhost:.../Home/About
(将…替换为端口号)您将被重定向到登录操作,成功登录后,您将被重定向到最初请求的主页/关于操作您是否尝试使用SO的搜索功能?如果是的话,它会给你这个。非常感谢你的帮助。救了我一天:)
case SignInStatus.Success:
return RedirectToLocal(returnUrl);