ASP.NET Core MVC 网站学习笔记

ASP.NET Core MVC 网站学习笔记

ASP.NET Core MVC 网站学习笔记

魏刘宏 2020年2月17日

最近因为”新冠”疫情在家办公,学习了 ASP.NET Core MVC 网站的一些知识,记录如下。

 

一、新建项目及基本结构

 

我们要新建的是 “ASP.NET Core Web 应用程序” 类型的项目:

%title插图%num

 

起名之后选择 .NET Core 分类下的 “Web 应用程序(模型视图控制器)” 模板,也就是 MVC 类型的模板,然后创建即可:

%title插图%num

 

创建后结构如下图:

%title插图%num

 

wwwroot 存放网站的 js、css 等前端文件,Models 存放模型类,Views 存放视图文件,Controllers 存放控制器;

appsettings.json 用于配置,比如可以在其中加入数据库连接字符串:

%title插图%num

 

Programs 是程序入口,实际的启动工作通过 Startup 来进行。

 

二、实体模型和 EF 框架

 

我们可以在 Models 文件夹下添加实体类,并给字段添加一些特性:

 
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

// 存放实体类 Entity
namespace EasyBlog.Models
{
    /// <summary>
    /// 用户表
    /// </summary>
    public class InfoUser
    {
        [Key] //非ID的主键需要
        [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; }
    }
}

 

再添加一个 数据库上下文类,继承 DbContext

using Microsoft.EntityFrameworkCore;

namespace EasyBlog.Models
{
    /// <summary>
    /// EntityFrameworkCore(实体框架) EF(Code First)
    /// </summary>
    public class DbWlh : DbContext
    {
        public DbWlh(DbContextOptions<DbWlh> options) : base(options)
        {
        }

        public DbSet<InfoUser> InfoUsers { get; set; }
        public DbSet<InfoBlog> InfoBlogs { get; set; }
        public DbSet<InfoReply> InfoReplies { get; set; }
        public DbSet<InfoLog> InfoLogs { get; set; }
    }
}

 

在 Startup 中的 ConfigureServices 方法中注册数据库上下文,用到了数据库上下文类和数据库连接字符串名称:

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    // 注册数据库上下文
    // 需要包:Microsoft.EntityFrameworkCore.sqlserver 和 Microsoft.EntityFrameworkCore.Tools
    services.AddDbContext<DbWlh>(options => 
                options.UseSqlServer(Configuration.GetConnectionString("DbWlh"))); 
}

 

现在我们可以打开”程序包管理器控制台”(在”工具”—”NuGet包管理器”中)了,敲入命令 “add-migration init” 来添加新的数据库”迁移”,其中”init”是迁移的名称。

%title插图%num

 

添加的”迁移”都保存在 Migrations 目录下:

%title插图%num

 

添加完”迁移”之后,就可以使用命令”update-database”将改动更新到数据库中了。

 

三、MVC

 

进行到这一步后,最简单的添加一套 MVC 增删改查功能(准确地说只添加了VC)的方法就是,在 Controllers 文件夹上右键—”添加”—”控制器”,然后选择 “视图使用Entity Framework的MVC控制器”:

%title插图%num

 

接下来选择好模型类、数据上下文类,勾上”生成视图”,点击”添加”即可:

%title插图%num

 

这样就不光生成了控制器,还在 Views 文件夹生成了相应的增删改查页面:

%title插图%num

 

当然,你也可以自己在控制器里写方法,然后在”return View()”的地方右键—”添加视图”,这样来添加视图:

%title插图%num

 

四、身份验证

 

我们首先还是在 Startup 中的 ConfigureServices 方法中配置使用 Cookie 方式来做身份验证:

%title插图%num

代码:

public const string CookieScheme = "Cookies";

    // 配置验证;
    services.AddAuthentication(CookieScheme)
        .AddCookie(CookieScheme, option =>
        {
            option.LoginPath = new PathString("/account/login");  //登陆的路径
            option.AccessDeniedPath = new PathString("/account/denied");
        });

 

在 Configure 方法中启用验证:

%title插图%num

代码:

app.UseAuthentication(); //启用验证;

 

然后在需要验证(登陆)才能用的控制器上标上”[Authorize]”特性:

%title插图%num

 

这样如果未通过验证就访问,就会跳转到验证页面(在 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”的形式获取到需要的数据。

 

好了,暂时就说这么多吧,再见。

原创文章,转载请注明: 转载自 独立观察员(dlgcy.com)

本文链接地址: [ASP.NET Core MVC 网站学习笔记](https://dlgcy.com/asp-net-core-mvc-learning/)

关注微信公众号 独立观察员博客(DLGCY_BLOG) 第一时间获取最新文章

%title插图%num

发表评论