Asp.net mvc 3 ASP.NET MVC 3和HttpContext.Current.User.Identity.Name

Asp.net mvc 3 ASP.NET MVC 3和HttpContext.Current.User.Identity.Name,asp.net-mvc-3,asp.net-membership,Asp.net Mvc 3,Asp.net Membership,我正在MVC3Razor应用程序中使用.net成员身份 我已经实现了一个自定义概要文件类,其中我使用HttpContext.Current.User.Identity.Name来获取成员资格用户 public class UserProfile : ProfileBase { static public UserProfile CurrentUser { get { return (UserProfile)(ProfileBase.C

我正在MVC3Razor应用程序中使用.net成员身份

我已经实现了一个自定义概要文件类,其中我使用HttpContext.Current.User.Identity.Name来获取成员资格用户

public class UserProfile : ProfileBase
{
    static public UserProfile CurrentUser
    {
        get {
               return (UserProfile)(ProfileBase.Create(Membership.GetUser(new Guid(HttpContext.Current.User.Identity.Name)).UserName)); 
            }
    }

    public string FirstName
    {
        get { return ((string)(base["FirstName"])); }
        set { base["FirstName"] = value; Save(); }
    }

    public string LastName
    {
        get { return ((string)(base["LastName"])); }
        set { base["LastName"] = value; Save(); }
    }
}
正如您在上面的类中所看到的,我必须将HttpContext.Current.User.Identity.Name转换为GUID才能获得成员资格用户

public class UserProfile : ProfileBase
{
    static public UserProfile CurrentUser
    {
        get {
               return (UserProfile)(ProfileBase.Create(Membership.GetUser(new Guid(HttpContext.Current.User.Identity.Name)).UserName)); 
            }
    }

    public string FirstName
    {
        get { return ((string)(base["FirstName"])); }
        set { base["FirstName"] = value; Save(); }
    }

    public string LastName
    {
        get { return ((string)(base["LastName"])); }
        set { base["LastName"] = value; Save(); }
    }
}
问题是,为什么在登录验证之后,在HttpContext.Current.User.Identity.Name中我得到的是GUID值userID而不是用户名


这正常吗

只需使用Membership.GetUser即可获取当前用户。

如果您使用默认的.NET成员身份、使用默认GenericPrincipal的FormAuthentication、FormSidenty,并且您已经从默认的“Internet应用程序”模板创建了MVC应用程序,则:

检查AccountController的“登录”操作方法。将用户名更改为UserIdGUID值的一个可能原因是将Auth cookie设置为“ProviderUserKey”作为用户名,如:

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            var user = Membership.GetUser(model.UserName);
            FormsAuthentication.SetAuthCookie(user.ProviderUserKey.ToString(), model.RememberMe);

            //...
            return Redirect(Url.Content("~/"));
        }
        else{
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

即使HttpContext.Current.User.Identity.IsAuthenticated为true,Membership.GetUser也为null。当然,在运行profile类之前,我在另一个类中执行成员身份验证membership.ValidateUseremail,password我不知道出了什么问题。我错过什么了吗?