首先请 using 这个类库.
using Microsoft.AspNetCore.Identity;
这个类库老牛逼了, 首先是包含了一个 IdentityUser 类. 我们可以自己写一个 User 类继承 IdentityUser, 这样一来, 很多属性我就不用手动建了. 如你所见, 我的 User 没有 Emai 这个字段, 但是 IdentityUser 有这个字段.
- public class User:IdentityUser
- {
- public string Pass { get; set; }
- public string DisplayName { get; set; }
- public DateTime RegisteredTime { get; set; }
- }
如何把用户发来的数据变成一个 User 并且存入数据库?
显然, 我他妈得先创建并且连接一个数据库.
创建数据库如果使用 VSStudio 是贼容易的一件事, 只需要打开'视图菜单', 然后点开'SQL Server 对象资源管理器'. 然后你就看到下面这个图. 在上面点右键然后添加一个 SQL 服务器, 然后在服务器上点右键查看属性, 可以得到链接字符串.
这种简单的操作显然难不住你. 下一步把连接字符串放到 appsetting.JSON 里面, 下面这是一种推荐做法. 你当然可以直接粘贴到你的 startUp.cs 文件中. 不过谁会这么做呢?
- "ConnectionStrings": {
- "DefaultConnection": "这里就是你的连接字符串"
- }
下一步要用这个连接字符串连上你的数据库. 注意带颜色的字. 很 JB 重要.
- // This method gets called by the runtime. Use this method to add services to the container.
- public void ConfigureServices(IServiceCollection services)
- {
- services.Configure<CookiePolicyOptions>(options =>
- {
- // This lambda determines whether user consent for non-essential cookies is needed for a given request.
- options.CheckConsentNeeded = context => true;
- options.MinimumSameSitePolicy = SameSiteMode.None;
- });
- // 看到了么, 下面这行代码用来连接数据库. 这是 EF 提供的方法.
- services.AddDbContext<AppContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
- // 在这里指定你的 User 类, 然后再指定你的数据库. 这是 Identity 类库提供的方法.
- services.AddDefaultIdentity<User>().AddEntityFrameworkStores<AppContext>();
- services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
- }
- public void Configure(IApplicationBuilder App, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- App.UseDeveloperExceptionPage();
- }
- else
- {
- App.UseExceptionHandler("/Error");
- App.UseHsts();
- }
- App.UseHttpsRedirection();
- App.UseStaticFiles();
- App.UseCookiePolicy();
- // 这里必须用上.
- App.UseAuthentication();
- App.UseMvc();
- }
经过上面的配置, controller 里面就可以注入很多方法. 这下你看起来牛逼多了.
数据库连上了, 接下来是真枪实弹的创建一个用户, 是时候写 controller 了.
建一个随便什么 controller 吧. 我建的是 UserController, 你可以随你的便. 关我屌事呢?
在 controller 的构造函数里面注入一个 UserManager 的类, 这个类也是 Identity 提供的.
- public class UserController : ControllerBase
- {
- private readonly UserManager<User> _userManager;
- public UserController(UserManager<User> userManager)
- {
- _userManager = userManager;
- }
- ......
这个 UserManager 有贼多的方法, 这里我只用一个, createAsync 方法.
- // POST: API/User
- [HttpPost]
- public async Task PostAsync([FromBody]User _user)
- {
- // 先创建一个 user, 不包括密码
- var user = new User { Email = _user.Email , UserName = _user.UserName};
- // 将 user 和密码绑定入库
- var result = await _userManager.CreateAsync(user, _user.Pass);
- if (result.Succeeded)
- {
- Console.Write("注册成功!");
- }
- }
用 Postman 模拟一个请求. 你注意到那个 FromBody 了吗? 这个标记可以把发过来的 JSON 请求解析成 User 格式.
这里有一个新手大坑. 如果你的 [FromBody] User _user 这里写的是 [FromBody] string _user, 你就不能用 JSON 格式发. 会报什么 JSON 解析错误.
发送请求以后去看看你的数据库吧. 已经创建好了一个 User 对象并且存到了你的数据库里.
这么多字段都是来自 IdentityUser 类, 其中只有那个 pass 字段是我自己 UserClass 里面的.
来源: https://www.cnblogs.com/oukichi/p/9955791.html