加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 我应该如何使用ReturnUrl = ViewBag.ReturnUrl

发布时间:2020-12-15 19:10:12 所属栏目:asp.Net 来源:网络整理
导读:我在’ASP.NET MVC 4’应用程序。我使用/学习SimpleMembershipProvider,并尝试坚持VS2012创建的默认逻辑与互联网模板(如果我没有误,一个与’SimpleMembershipProvider’开箱)。 我陷入了AccountController,我只是不能计算出我该如何使用这种方法: privat
我在’ASP.NET MVC 4’应用程序。我使用/学习SimpleMembershipProvider,并尝试坚持VS2012创建的默认逻辑与互联网模板(如果我没有误,一个与’SimpleMembershipProvider’开箱)。

我陷入了AccountController,我只是不能计算出我该如何使用这种方法:

private ActionResult RedirectToLocal(string returnUrl)
        {
            if (Url.IsLocalUrl(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index","Home");
            }
        }

从我的理解,整个想法是重定向到您决定登录的位置(完全是我想要完成的)。我看看它如何在视图中使用:

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))

寻找一个地方实际上ViewBag.ReturnUrl设置了一些值,我只有这里方法:

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}

并且我很困惑关于我应该如何获得位置/ url。我设置了一些断点,我从来没有见过returnUrl是不同于null的东西,在这种情况下看起来很合乎逻辑,因为它不会在任何地方获得值(除非我当然错过了)。

所以我真的不知道如何这项工作。我发布以上只是为了表明我试图做我的家庭作业,我尽可能多地调查,但我没有找到一个答案,所以我问这里。你能提供解释/例子如何这实际工作吗?

解决方法

当使用表单身份验证,并且用户未经身份验证或授权时,ASP.NET安全管道将重定向到登录页面,并作为参数传递到查询字符串中returnUrl等于重定向到登录页面的页面。登录操作捕获此参数的值并将其放在ViewBag中,以便它可以传递到View。
[AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

然后,视图将此值存储在视图中此行代码所示的表单中。

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))

存储在视图中的原因是,当用户在输入用户名和密码后进行提交时,处理回发的控制器操作将可以访问此值。

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

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

如果模型状态是有效的,并且它们通过调用WebSecurity.Login方法进行身份验证,那么它将调用方法RedirectToLocal,并返回来自View的returnUrl值,该值来自创建视图的登录操作。

如果用户没有重定向到登录页面,那么returnUrl值将为null,就像在用户点击默认布局中页面顶部的登录链接时一样。在这种情况下,用户将在成功登录后重定向到主页。 returnUrl的整体目的是自动将用户发送回他们在验证/授权之前尝试访问的页面。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读