MVC4 - 在后控制器操作期间,WebSecurity.CurrentUserId正在丢失它的值,并变为-1

时间:2013-09-11 15:12:05

标签: asp.net-mvc-4

不知何故,在这个控制器中,在SaveChanges之后,CurrentUserId变为-1。 数据发布工作,并且CurrentUserId具有它的登录值(例如8888),但在SQL插入之后,WebSecurity.CurrentUserId变为-1。任何线索?在调试期间,我找不到位置和原因。

    // POST: /Account/Edit
    [HttpPost]
    [ValidateInput(false)]
    public ActionResult Edit(UserProfile model)
    {
        if (ModelState.IsValid)
        {

            using (var context = new dbContext())
            {
                var id = WebSecurity.CurrentUserId;
                var account = context.UserProfiles.Find(id);
                UpdateModel(account);
                context.SaveChanges();
                return RedirectToAction("Index", "Account");
            }


        }
        else
        {
            return View(model);
        }
    }

1 个答案:

答案 0 :(得分:0)

将始终返回-1,您需要的是以下代码

 int currentuserid = WebSecurity.GetUserId(username);

然后,您可以验证上面的用户ID是否与模型中的用户ID匹配,以防止用户更改其他用户代码

另外。我在我的基本控制器中使用它:

public int GetUserId()
    {
        var userid = "0";

        if (Request.IsAuthenticated && User.Identity.Name != null)
        {
            var membershipUser = Membership.GetUser(User.Identity.Name);
            if (membershipUser != null)
            {
                if (membershipUser.ProviderUserKey != null)
                {
                    userid = membershipUser.ProviderUserKey.ToString();
                }
            }
        }

        return Convert.ToInt32(userid);
    }