gpt4 book ai didi

asp.net-mvc - 将 ActionLink 的 returnUrl 从 View 传递到重定向回 View 的登录表单

转载 作者:行者123 更新时间:2023-12-02 16:19:23 24 4
gpt4 key购买 nike

我读过很多关于 returnUrl 的帖子,因为它与表单例份验证有关,默认为 [authorize] MyController ,但我还没有读到任何关于简单地传递 returnUrl 的内容,其中唯一的身份验证发生在 [HttpPost] 之后,使用登录或注册表单和匿名用户。在这种情况下,我希望重定向来自原始链接并传递到通过表单例份验证对用户进行身份验证的操作。此重定向应在用户 1) 单击注册或登录 ActionLinks,然后 2) 成功提交表单后返回到正在查看的页面。这是在开发服务器上,因此 ATM 不需要 HTTPS。

以下元素没有传递 returnUrl 所需的语法/代码

_LoginPartial:

<li>@Html.ActionLink("Register", "Register", "Account", routeValues: null}, htmlAttributes: new { id = "registerLink" })</li> //returnUrl???
<li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li> // returnUrl???

登录 View :

@using (Html.BeginForm()){...} //new { returnUrl } ???

登录获取操作结果:

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
//There is other ways to store the route
TempData["ReturnUrl"] = returnUrl;
return View();
}

登录后操作结果:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(TempData["ReturnUrl"].ToString());
}

// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
<小时/>

解决方案感谢SlightlyMoist我能够解决这个问题。虽然代码很小,但 ViewContext.RouteData.Values["key"] 的能力和专业知识在我看来,这似乎是无价的。因此,根据 SM 所做的唯一修改是在 _LoginPartial View 的 ActionLink 内完成的:

<li>
@Html.ActionLink("Register", "Register", "Account", routeValues: new {@returnUrl = Url.Action(ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString(), ViewContext.RouteData.Values["id"])}, htmlAttributes: new { id = "registerLink" })
</li>

<li>
@Html.ActionLink("Log in", "Login", "Account", routeValues: new {@returnUrl = Url.Action(ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString(), ViewContext.RouteData.Values["id"])}, htmlAttributes: new { id = "loginLink" })
</li>

还有再次根据 SM,ViewContext.HttpContext.Request.Url.PathAndQuery也有效:

<li>
@Html.ActionLink("Register", "Register", "Account", routeValues: new {@returnUrl = ViewContext.HttpContext.Request.Url.PathAndQuery},htmlAttributes: new { id = "registerLink" })
</li>

最佳答案

只需将当前路由/URL 解析为登录操作链接中的routeValue。

像这样的事情应该可以解决问题

@Html.ActionLink("Login", "Login", "Account", 
new {@returnUrl = Url.Action(ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString())})

关于asp.net-mvc - 将 ActionLink 的 returnUrl 从 View 传递到重定向回 View 的登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22801104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com