我正在构建一个电子商店网络应用程序。作为一个过程,将会有一些操作需要用户首先进行身份验证,然后才能执行进一步的步骤。默认情况下,当用户登录时,ASP.Net身份将被重定向到Home控制器的索引Action,这不是我想要的。我想将用户从他/她来自的地方重定向。任何的想法? 这是我的控制器:
[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);
}
}
我正在使用ASP.Net MVC5身份。
答案 0 :(得分:0)
默认情况下,当用户登录时,ASP.Net身份将是 重定向到Home控制器的索引Action,而不是 我想要的是。我想将用户从他/她来的地方重定向 从
这个假设并不完全正确。请求的行为实际上是默认行为。
如果查看Login操作(HTTPGET),您会注意到它有一个returnUrl
参数。当401 Unauthorized状态代码更改为302重定向到登录路径时,由OWIN中间件填充。 returnUrl
vallue被分配给ViewBag.ReturnUrl
,后来用于附加此值登录回发URL(Login.cshtml视图):
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
Inside Login(HTTPPOST)操作您可以注意到相同的returnUrl参数,该参数用于在登录成功的情况下将用户重定向到此URL:
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
因此,例如,如果您将Homeize属性设置为Home控制器中的About操作并尝试通过键入浏览器http://localhost:.../Home/About
(替换...与端口号)来访问它,您将被重定向到Login操作并且一旦您成功登录,您将被重定向到最初请求的主页/关于操作