C# Web API个人帐户:如何添加角色

C# Web API个人帐户:如何添加角色,c#,.net,asp.net-mvc,entity-framework,asp.net-web-api,C#,.net,Asp.net Mvc,Entity Framework,Asp.net Web Api,在ASP Web API中,我使用个人帐户注册用户。我在本官方教程之后实现了此功能: 现在,我希望能够为用户分配一个角色:当执行Register方法时,我还希望传递POST请求中的角色: { "UserName": "Alice", "Password": "password123", "ConfirmPassword": "password123", "Role": "admin" -> i want add this } R

在ASP Web API中,我使用个人帐户注册用户。我在本官方教程之后实现了此功能:

现在,我希望能够为用户分配一个角色:当执行Register方法时,我还希望传递POST请求中的角色:

{
   "UserName": "Alice",
   "Password": "password123",
   "ConfirmPassword": "password123",
   "Role": "admin"                  -> i want add this
}
Register方法必须正确地为数据库的表赋值。 如何处理web api个人帐户中的角色?有教程吗


谢谢

创建用户和相应角色后,只需在代码中添加以下行

var roleresult = UserManager.AddToRole(currentUser.Id, "RoleName");
您还应该将角色属性添加到视图模型(通常称为RegisterBindingModel),该属性将传递给Register方法

更新

下面是一个完整的示例,Register方法的样子(RoleEntityUserEntity是我在Identity中对适当类的实现,但这也适用于自定义实现)


有什么指南或书可以让我记录这个论点吗?这本书缺少很多信息。更好的资源是和的博客。@Tom我更新了我的帖子,为您提供了一个完整的示例,说明如何自定义Register方法以支持角色添加。视图模型中的Role属性也可以是字符串。
public async Task<IdentityResult> RegisterAsync(RegisterViewModel model)
{
    var user = new UserEntity { UserName = model.UserName };
    var role = model.Role.ToString();

    if (await _roleManager.FindByNameAsync(role) == null)
    {
        var roleResult = await _roleManager.CreateAsync(new RoleEntity(role));

        if (roleResult != IdentityResult.Success)
        {
            return roleResult;
        }
    }

    var result = await _userManager.CreateAsync(user, model.Password);

    if (!result.Succeeded)
    {
        return result;
    }

    var addToRoleResult = await _userManager.AddToRoleAsync(user.Id, role);

    return !addToRoleResult.Succeeded ? addToRoleResult : IdentityResult.Success;
}
public class RegisterViewModel
{
    [Required(ErrorMessage="This field is required")]
    [Display(Name = "User name", Prompt="Please enter user name...")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "This field is required")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password", Prompt="Please enter password...")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password", Prompt = "Please enter confirm password...")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    [Required(ErrorMessage = "This field is required")]
    [Display(Name = "Role")]
    public Roles Role { get; set; }
}