ASP.NET Core MVC 网站学习笔记
最近因为” 新冠” 疫情在家办公,学习了 ASP.NET Core MVC 网站的一些知识,记录如下。
一、新建项目及基本结构
我们要新建的是 “ASP.NET Core Web 应用程序” 类型的项目:
起名之后选择 .NET Core 分类下的 “Web 应用程序 (模型视图控制器)” 模板,也就是 MVC 类型的模板,然后创建即可:
创建后结构如下图:
wwwroot 存放网站的 js、css 等前端文件,Models 存放模型类,Views 存放视图文件,Controllers 存放控制器;
appsettings.json 用于配置,比如可以在其中加入数据库连接字符串:
Programs 是程序入口,实际的启动工作通过 Startup 来进行。
二、实体模型和 EF 框架
我们可以在 Models 文件夹下添加实体类,并给字段添加一些特性:
1 using System; 2 using System.ComponentModel; 3 using System.ComponentModel.DataAnnotations; 4 5 // 存放实体类 Entity 6 namespace EasyBlog.Models 7 { 8 /// <summary> 9 /// 用户表 10 /// </summary> 11 public class InfoUser 12 { 13 [Key] // 非 ID 的主键需要 14 [StringLength(10)] 15 [DisplayName("用户名")] // 显示的名称,主要用于前端页面 16 [Required(ErrorMessage = "酒店名称不能为空")] 17 public string UserName { get; set; } 18 19 [StringLength(16)] 20 [DisplayName("密码")] 21 [Required(ErrorMessage = "密码不能为空")] 22 public string Password { get; set; } 23 24 [DisplayName("创建日期")] 25 public DateTime DTCreate { get; set; } 26 27 [DisplayName("登陆日期")] 28 public DateTime DTLogin { get; set; } 29 30 public byte[] HeaderImg { get; set; } 31 } 32 }
再添加一个 数据库上下文类,继承 DbContext :
1 using Microsoft.EntityFrameworkCore; 2 3 namespace EasyBlog.Models 4 { 5 /// <summary> 6 /// EntityFrameworkCore (实体框架) EF (Code First) 7 /// </summary> 8 public class DbWlh : DbContext 9 { 10 public DbWlh(DbContextOptions<DbWlh> options) : base(options) 11 { 12 } 13 14 public DbSet<InfoUser> InfoUsers { get; set; } 15 public DbSet<InfoBlog> InfoBlogs { get; set; } 16 public DbSet<InfoReply> InfoReplies { get; set; } 17 public DbSet<InfoLog> InfoLogs { get; set; } 18 } 19 }
在 Startup 中的 ConfigureServices 方法中注册数据库上下文,用到了数据库上下文类和数据库连接字符串名称:
1 // This method gets called by the runtime. Use this method to add services to the container. 2 public void ConfigureServices(IServiceCollection services) 3 { 4 services.AddControllersWithViews(); 5 6 // 注册数据库上下文 7 // 需要包:Microsoft.EntityFrameworkCore.sqlserver 和 Microsoft.EntityFrameworkCore.Tools 8 services.AddDbContext<DbWlh>(options => 9 options.UseSqlServer(Configuration.GetConnectionString("DbWlh"))); 10 }
现在我们可以打开” 程序包管理器控制台”(在” 工具”—”NuGet 包管理器” 中)了,敲入命令 “add-migration init” 来添加新的数据库” 迁移”,其中”init” 是迁移的名称。
添加的” 迁移” 都保存在 Migrations 目录下:
添加完” 迁移” 之后,就可以使用命令”update-database” 将改动更新到数据库中了。
三、MVC
进行到这一步后,最简单的添加一套 MVC 增删改查功能(准确地说只添加了 VC)的方法就是,在 Controllers 文件夹上右键 —” 添加”—” 控制器”,然后选择 “视图使用 Entity Framework 的 MVC 控制器”:
接下来选择好模型类、数据上下文类,勾上” 生成视图”,点击” 添加” 即可:
这样就不光生成了控制器,还在 Views 文件夹生成了相应的增删改查页面:
当然,你也可以自己在控制器里写方法,然后在”return View ()” 的地方右键 —” 添加视图”,这样来添加视图:
四、身份验证
我们首先还是在 Startup 中的 ConfigureServices 方法中配置使用 Cookie 方式来做身份验证:
代码:
1 public const string CookieScheme = "Cookies"; 2 3 // 配置验证; 4 services.AddAuthentication(CookieScheme) 5 .AddCookie(CookieScheme, option => 6 { 7 option.LoginPath = new PathString("/account/login"); // 登陆的路径 8 option.AccessDeniedPath = new PathString("/account/denied"); 9 });
在 Configure 方法中启用验证:
代码: app.UseAuthentication(); // 启用验证;
然后在需要验证(登陆)才能用的控制器上标上”[Authorize]” 特性:
这样如果未通过验证就访问,就会跳转到验证页面(在 Startup 中配置过的)。
至于登陆成功的验证信息的保存则使用以下代码:
// 保存验证结果; var claims = new List<Claim>(); claims.Add(new Claim(ClaimTypes.Name, userName)); var claimsIdentity = new ClaimsIdentity(claims, "Cookies"); await HttpContext.SignInAsync(new ClaimsPrincipal(claimsIdentity));
这样再访问需要验证的页面,就能顺利通过了,而且可以使用”User.Identity.Name” 的形式获取到需要的数据。
好了,暂时就说这么多吧,再见。
首发:http://dlgcy.com/asp-net-core-mvc-learning/