加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:59:23 所属栏目:asp.Net 来源:网络整理
导读:我正在构建一个Web API(2)项目并使用“个人帐户”身份验证. 我想要 使用一些细节(如名字/姓氏等)扩展用户(在模型中) 登录后获取该信息(在客户端 – 我的案例Windows手机) 我刚刚开始学习MVC和Web API,所以任何人都可以帮助我吗? 让我解释一下自己: 我创建
我正在构建一个Web API(2)项目并使用“个人帐户”身份验证.
我想要

>使用一些细节(如名字/姓氏等)扩展用户(在模型中)
>登录后获取该信息(在客户端 – 我的案例Windows手机)

我刚刚开始学习MVC和Web API,所以任何人都可以帮助我吗?

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

解决方法

首先,如: Introduction to ASP.NET Identity

By default,the ASP.NET Identity system stores all the user information in a database. ASP.NET Identity uses Entity Framework Code First to implement all of its persistence mechanism.

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

public class CustomUser : IdentityUser
{
    public string Email { get; set; }
}

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

UserManagerFactory = () => new UserManager<CustomUser>(new UserStore<CustomUser>());

还有财产:

public static Func<UserManager<CustomUser>> UserManagerFactory { get; set; }

在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; }
}

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

CustomUser user = new CustomUser
        {
            UserName = model.UserName,Email=model.Email
        };

我希望它会有所帮助

UPDATE

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读