如何扩展asp.net web api 2用户?

Ser*_*aru 4 asp.net-mvc asp.net-web-api asp.net-mvc-5

我正在建立一个Web API (2)项目并使用"individual account" authentication.我想要

  1. 扩展用户的一些细节(如名字/姓氏等) (in model)
  2. 登录后获取该信息(在客户端 - 我的案例Windows手机)

我刚刚开始学习MVC,Web API所以有人可以帮助我吗?

让我自己解释一下:我已经创建了webapi项目并选择了身份验证方法 - "inidividual accounts"我已经添加了一个名为Person的模型类,其中包含2个字段:FirstName和LastName.好吧,我用fiddler用密码注册名为"johndoe"的用户.在此之后,我使用fiddler在"server:port/Token"中验证此用户并获得了持有者令牌.那么这是一个问题,我需要知道如何将这个用户类与模型中的Person类相关联,其次我不知道如何编写控制器,所以当发送一个get请求时,我们的控制器函数将返回相关的Person.

Yas*_*jab 11

首先,如:ASP.NET身份简介

默认情况下,ASP.NET Identity系统将所有用户信息存储在数据库中.ASP.NET Identity使用Entity Framework Code First来实现其所有持久性机制.

现在,IdentityUser类将映射到数据库中的AspNetUsers表,因此我们通过创建一个继承它的新类来扩展它并添加我们的自定义属性:

public class CustomUser : IdentityUser
{
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你应该让UserManager类使用CustomUser而不是IdentityUser Class,所以在Startup.cs中,将UserManager和UserStore的泛型类型更改为:

UserManagerFactory = () => new UserManager<CustomUser>(new UserStore<CustomUser>());
Run Code Online (Sandbox Code Playgroud)

还有财产:

public static Func<UserManager<CustomUser>> UserManagerFactory { get; set; }
Run Code Online (Sandbox Code Playgroud)

在ApplicationOAuthProvider.cs中,解决方案中的任何位置对UserManager的泛型类型执行相同的更改,并开始使用CustomUser而不是IdentityUser.您可以将新的"Email"属性添加到R​​egisterBindingModel,如下所示:

public class RegisterBindingModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

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

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

    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在注册时你可以增加价值:

 CustomUser user = new CustomUser
        {
            UserName = model.UserName,
            Email=model.Email
        };
Run Code Online (Sandbox Code Playgroud)

我希望它会有所帮助

UPDATE

如果有人得到ExceptionMessage"无效的列名'Discriminator'." 这意味着在执行我的步骤之前已经创建了"AspNetUsers",并且该表没有"Discriminator"列,因此您应该做的就是进入数据库,通过添加类型的新列来更改AspNetUsers表的设计as nvarchar(128)(在我的例子中也添加一个你希望拥有的新列,并将其命名为Discriminator,并且不要忘记在此列的字段中填写具有适当值的旧记录(在我的中)例如它将是CustomUser).