基于路由登录的C#MVC4登录操作

时间:2013-04-21 22:11:46

标签: c# url asp.net-mvc-4 login authorization

在我的C#MVC4应用程序中,每个视图的顶部都有两个选项卡。一个标记为编辑,另一个标记为Admin。单击这两个选项卡中的任何一个时,用户将被重定向到登录页面。在Login ActionResult中,在验证用户之后,我会检查用户是否属于我用作角色的特定AD组。一切正常。我的问题是尝试根据用户是通过单击编辑还是单击管理员来访问登录来检测和执行操作。

我如何获取此信息?我尝试过类似的东西:

if(HttpContext.Request.UrlReferrer.OriginalString.Contains("Edit"))

但包含的网址类似于Account/Login

我目前的代码是:

public ActionResult Login(LoginModel model, string returnUrl)
        {
            //Checks if user exists in Active Directory
            if (ModelState.IsValid && Membership.ValidateUser(model.UserName, model.Password))
            {
                    //Logs user in by creating a cookie
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

                    //Checks to see if user belongs to a group with Edit or Admin Priviledges
                    if ((Roles.IsUserInRole(model.UserName,"TCL-CAdmin")) || (Roles.IsUserInRole(model.UserName, "TCL-CGroup")))
                    {
                        return RedirectToAction("Index", "Home");
                    }
                    else
                    {
                        return RedirectToAction("Index_Perm", "Home");
                    }
                }
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            return View(model);
        }

这两个标签在我的layout.cshtml中创建,如下所示:

 <ul id="menu">
                        <li>@Html.ActionLink("Edit", "Login", "Account")</li>
                        <li>@Html.ActionLink("Admin", "Admin", "Home")</li>
                    </ul>

1 个答案:

答案 0 :(得分:1)

我发现你没有在你的控制器动作中使用returnUrl参数,你可以像这样传递它:

@Url.Action("Login", "Account", new { returnUrl = Request.RawUrl })

除此之外,您还可以传递另一个参数作为上下文,例如:

@Url.Action("Login", "Account", new { returnUrl = Request.RawUrl, context = "Edit" })

并将您的操作签名更改为:

public ActionResult Login(LoginModel model, string returnUrl, string context)

这是你的意思吗?