首先請using這個類庫。 這個類庫老牛逼了,首先是包含了一個IdentityUser類。我們可以自己寫一個User類繼承IdentityUser,這樣一來,很多屬性我就不用手動建了。如你所見,我的User沒有Emai這個欄位,但是IdentityUser有這個欄位。 如何把用戶發來的數據變成一個U ...
首先請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裡面的。