我正在建立一个Web API (2)
项目并使用"individual account" authentication
。我想要
(in model)
我刚刚开始学习MVC
,Web API
因此有人可以帮我吗?
让我自己解释一下:我已经创建了webapi项目并选择了作为身份验证方法-“单个帐户”。我添加了一个名为Person的模型类,其中包含2个字段:FirstName和LastName。好吧,我已经用提琴手为一个名为“ johndoe”的用户注册了密码。之后,我使用了提琴手在“ server:port / Token”上对该用户进行身份验证并获得了承载令牌。好了,这是一个问题,我需要知道如何在模型中将此用户类与我的Person类关联,其次我不知道如何编写控制器,因此何时发送get请求,我们的控制器函数将返回关联的Person。
首先,如:ASP.NET身份简介
默认情况下,ASP.NET Identity系统将所有用户信息存储在数据库中。ASP.NET Identity使用Entity Framework Code First来实现其所有持久性机制。
现在,IdentityUser类将映射到数据库中的AspNetUsers表,因此让我们通过创建一个继承自它的新类并添加我们的自定义属性来扩展它:
public class CustomUser : IdentityUser
{
public string Email { get; set; }
}
然后,应让UserManager类使用CustomUser而不是IdentityUser类,因此在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”属性添加到RegisterBindingModel中,如下所示:
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
};
希望对您有所帮助
更新
如果有人收到ExceptionMessage“无效的列名'Discriminator'。” 这意味着在执行我的步骤之前已经创建了“ AspNetUsers”,并且该表没有“ Discriminator”列,因此您要做的就是进入数据库,通过添加一个新的类型为type的字段来更改AspNetUsers表的设计作为nvarchar(128)(也要添加一个新列,例如我的示例中的Email),并将其命名为Discriminator,并且不要忘记为该列的字段填充具有适当值的旧记录(在我的例如CustomUser)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句