具有自定义UserStore的Asp.Net标识,过载不可访问

时间:2016-02-22 12:48:05

标签: c# asp.net asp.net-mvc asp.net-identity ravendb

我正在通过RavenDB实现ASP.NET Identity并尝试向我的用户添加角色。 https://github.com/aspnet/WebSockets

此实现具有以下可用的重载public Task AddToRoleAsync(TUser user, string role)

ApplicationUserManager来自UserManager,但我无法达到超载。唯一可用的方法是基本方法AddToRoleAsync(string UserId, string role)

Store属性是UserManager基类中的公共属性,因此它看起来并不特别。

我也尝试直接调用manager.Store.AddToRoleAsync,但我再次没有使用智能感知来重载方法。

我希望有人可以指导我朝着正确的方向前进,真的卡在这里。

https://github.com/ILMServices/RavenDB.AspNet.Identity/blob/master/RavenDB.AspNet.Identity/UserStore.cs When I create the UserStore the member is accessible: 然后当然我的控制器继承了这个问题,这开始我搜索为什么会发生这种情况。

After I created the ApplicationUserManager with the UserStore the member is hidden

在响应CodeNotFound时,这是ApplicationUser。这很简单。

   public class ApplicationUser : IdentityUser, IEntity
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime Created { get; set; }
        public DateTime Modified { get; set; }


        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

            // Add custom user claims here
            return userIdentity;
        }
    }

1 个答案:

答案 0 :(得分:0)

这是因为您需要像这样编写自定义ApplicationUserManager

    /// <summary>
    /// Method to add user to multiple roles
    /// </summary>
    /// <param name="userId">user id</param>
    /// <param name="roles">list of role names</param>
    /// <returns/>
    public Task<IdentityResult> AddToRolesAsync(string userId, string[] roles)
    {
        return yourrolestore.AddToRolesAsync(userId, roles.GetStringArray());
    }

因为就像你写的那样,UserManager并不知道你定义的UserStore。您必须手动执行链接

修改

扩展UserManager时,必须指定Key的类型。所以在你的情况下输入:

UserManager<ApplicationUser, int>

通常,您会在参数中找到带 int 键的重载方法。