首先请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里面的。

最后补充【关于Migration】:

如果你报500错误,说什么表名无效的话。你需要做一下Migration。说白了就是:让数据库的表结构和你代码的Model结构相同。比如你现在有了一个UserModel,可是数据库没有User这个表。那么你能创建成功才他妈有鬼了。

怎么Migration?

简单。

这是创建一个名为“InitialCreate”的Migration
如果你用的是powershell
Add-Migration InitialCreate 如果你用的是console
dotnet ef migrations add InitialCreate 然后更新数据库
>powershell
Update-Database >console
dotnet ef database update

最新文章

  1. php批量删除
  2. Bash 中的 _ 是不是环境变量
  3. js 连续赋值。。理解不了,先占坑
  4. flex布局模式简单概述
  5. Android开发之 Windows环境下通过Eclipse创建的第一个安卓应用程序(图文详细步骤)
  6. [qemu] 挂载qcow2文件,qcow2里边还有个lvm
  7. robotframework笔记18
  8. ABAP简单表维护的制作
  9. HANDLE HINSTANCE HWND CWnd CDC
  10. QAction系列详解
  11. poj1995-快速幂取模
  12. Android @+id与@id的区别
  13. qq客服代码实现过程
  14. [搬运] DotNetAnywhere:可供选择的 .NET 运行时
  15. Python小代码_5_二维矩阵转置
  16. 03 持续集成和部署/基础设施 - DevOps之路
  17. Win10手记-为应用集成SQLite(二)
  18. gitlab+jenkins=自动化构建
  19. SQL Server 基本INSERT语句
  20. 【转】MySQL:日期函数、时间函数总结(MySQL 5.X)

热门文章

  1. TensorFlow—张量运算仿真神经网络的运行
  2. Java finalize以及Garbage Collection
  3. 在Objc项目中调用Swift
  4. [leetcode]438. Find All Anagrams in a String找出所有变位词
  5. 在iframe框架中全屏不好使的原因
  6. Vim基础教程
  7. PAT 1079 延迟的回文数(代码+思路)
  8. DB2 字符串的字段转为整形时的问题
  9. Spring boot 默认静态资源路径与手动配置访问路径的方法
  10. word-break:break-all; 和 word-wrap:break-word 换行