• ASP.NET Core MVC 网站学习笔记


    ASP.NET Core MVC 网站学习笔记

    魏刘宏 2020 年 2 月 17 日

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

     

    一、新建项目及基本结构

     

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

     

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

     

    创建后结构如下图:

     

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

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

     

    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(实体框架) <span class='wp_keywordlink_affiliate'><a href="http://dlgcy.com/tag/ef/" title="View all posts in EF" target="_blank">EF</a></span>(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” 是迁移的名称。

     

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

     

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

     

    三、MVC

     

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

     

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

     

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

     

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

     

    四、身份验证

     

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

    代码:

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

    在 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/

     

  • 相关阅读:
    koa2 ctx.body 在 mysql query的回调函数中无法赋值的问题
    hibernate 实现多表连接查询
    Struts2 的国际化实现
    struts2 dwr There is no Action mapped for action ... 原因及解决方案
    Hibernate4.1配置数据库连接池 org.hibernate.service.jndi.JndiException:Unable to lookup JNDI name java:comp/env...
    Android 使用JSON格式与服务器交互 中文乱码问题解决
    Struts2 访问 Servlet API 的三种方法
    Struts2 输入校验
    hibernate4 和 spring3 整合注意事项 否则java.lang.NoSuchMethodError异常
    MySQL密码忘记的解决方案
  • 原文地址:https://www.cnblogs.com/weiliuhong/p/asp-net-core-mvc-learning.html
Copyright © 2020-2023  润新知