我正在通过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 然后当然我的控制器继承了这个问题,这开始我搜索为什么会发生这种情况。
在响应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;
}
}
答案 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 键的重载方法。