最近由于疫情緊張,遂在家辦公,在領導的帶領下,學習了一下.Net Core MVC,
一,構建web應用
1.選擇c#-所有平臺-web 找到ASP.NET Core web應用程式

2.專案命名之后轉至如下界面:選擇Web應用程式(模型視圖控制器),

Ok點擊創建,這個專案的基本框架就生成了,
二,EF-Code First 資料遷移
1,在Models里面新建物體類和資料庫背景關系類,并添加相對應的參考和框架

具體代碼如下:
物體類:
public class InfoUser { [Key] [StringLength(10)] [DisplayName("用戶名")] [Required(ErrorMessage = "用戶名不能為空")] public string UserName { get; set; } [StringLength(16)] [DisplayName("密碼")] [Required(ErrorMessage = "密碼不能為空")] public string Password { get; set; } [DisplayName("創建日期")] public DateTime DTCreate { get; set; } [DisplayName("登陸日期")] public DateTime DTLogin { get; set; } public byte[] HeaderImg { get; set; } } /// <summary> /// 博客表 /// </summary> public class InfoBlog { public int ID { get; set; } [StringLength(10)] public string UserName { get; set; } [StringLength(64)] public string Title { get; set; } public string Content { get; set; } public int VisitCount { get; set; } public DateTime DTCreate { get; set; } } /// <summary> /// 回復表 /// </summary> public class InfoReply { public int ID { get; set; } public int BlogID { get; set; } [StringLength(10)] public string UserName { get; set; } public string Content { get; set; } public DateTime DTCreate { get; set; } } /// <summary> /// 日志表 /// </summary> public class InfoLog { public int ID { get; set; } [StringLength(64)] public string Title { get; set; } public string Content { get; set; } public DateTime DTCerate { get; set; } }
背景關系類(需要繼承DbContext):
public class DBXlp : DbContext { public DBXlp(DbContextOptions<DBXlp> options) : base(options) { } //add-migration init update-database public DbSet<InfoUser> InfoUsers { get; set; } public DbSet<InfoBlog> InfoBlogs { get; set; } public DbSet<InfoReply> InfoReplies { get; set; } public DbSet<InfoLog> InfoLogs { get; set; } }
2,通過NuGet添加下面的兩個包

3,在appsettings.json里面添加連接資料庫的字串
{
"ConnectionStrings": {
"DbXlp": "Server=.;Database=dbXlp;User id=sa;Password=123456"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
4,然后在 Startup.cs 的 ConfigureServices(IServiceCollection services) 中,我們作為一個服務注冊了背景關系物件,
services.AddDbContext<DBXlp>(options=>options.UseSqlServer(Configuration.GetConnectionString("DbXlp")));
5,打開 工具->NuGet包管理器->程式包管理器控制臺
- 輸入命令:add-migration init(可隨意)(為掛起的Model變化添加遷移腳本 )
- 輸入命令:update-database( 將掛起的遷移更新到資料庫 )

Ok 可以看到下面資料庫里已經有了對應表資訊!

三,使用Identity進行登錄驗證
在Startup中:
1.定義一個string型別的CookieScheme作為認證方案
public const string CookieScheme = "Cookies";
2.ConfigureServices中使用AddCookie設定選項
services.AddAuthentication(CookieScheme)
.AddCookie(CookieScheme, option =>
{
// 登錄路徑:這是當用戶試圖訪問資源但未經過身份驗證時,程式將會將請求重定向到這個相對路徑,
option.LoginPath = new PathString("/account/login");
// 禁止訪問路徑:當用戶試圖訪問資源時,但未通過該資源的任何授權策略,請求將被重定向到這個相對路徑
option.AccessDeniedPath = new PathString("/account/denied");
});
3.在Configure方法中使用 UseAuthentication來呼叫認證中間件(如下圖所示位置)

控制器里面:
創建一個包含用戶資訊的 cookie可以構造一個ClaimsPrincipal,用戶資訊會被序列化然后保存在cookie 里面,
public async Task<ActionResult> Logining()
{
var userName = Request.Form["UserName"];
var password = Request.Form["Password"];
var item = db.InfoUsers.Find(userName);
if (item != null && password == item.Password)
{
item.DTLogin = DateTime.Now;
db.SaveChanges();
//用Claim來構造一個ClaimsIdentity,然后呼叫 SignInAsync 方法,
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, userName));
var claimsIdentity = new ClaimsIdentity(claims, "Cookies");
//登錄
await HttpContext.SignInAsync("Cookies", new ClaimsPrincipal(claimsIdentity));
return RedirectToAction("Index", "Blog");
}
else
ViewBag.Msg = "登陸失敗";
return View();
}
public async Task<IActionResult> Logout()
{
//退出
await HttpContext.SignOutAsync("Cookies");
return RedirectToAction("Index", "Home");
}
然后我們只需要對那些需要授權登陸才能執行的界面或者操作標記[Authorize]即可:

最后我們也可以在Razor中判斷是否授權成功:
@if (User.Identity.IsAuthenticated)
{
<textarea id="TextArea1" rows="10" ></textarea>
<button onclick="Reply()" >回復</button>
}
else
{
<a asp-action="Login" asp-controller="Account">登錄</a>
}
就寫到這里,下次繼續!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/63184.html
標籤:.NET Core
