C# ASP.NET Core Web API MySQL使用教程(三)

接上两篇文章继续:C# ASP.NET Core Web API 身份授权(JWT)验证(一)_蛋蛋の微笑的博客-CSDN博客C# ASP.NET Core Web API 身份授权(JWT)验证https://blog.csdn.net/u012402739/article/details/128463873

C# ASP.NET Core Web API Redis使用教程(二)_蛋蛋の微笑的博客-CSDN博客C# ASP.NET Core Web API Redis使用教程(二)https://blog.csdn.net/u012402739/article/details/128465931

右键点击工程,选择 管理NuGet程序包 ,添加 (注意版本):

Microsoft.EntityFrameworkCore

Microsoft.EntityFrameworkCore.Design

Pomelo.EntityFrameworkCore.MySql

Swashbuckle.AspNetCore

  打开 appsettings.json 配置文件,添加如下配置:

  "ConnectionStrings": {
    "DefaultConnection": "Server=127.0.0.1; Port=3306; Database=root; Uid=root; Pwd=123456;"
  }

在 Models 文件夹中添加 StudentInfo.cs 类: 

完整代码如下: 

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

namespace TestApi.Models
{
    public class StudentInfo
    {
        [Key]
        [Column("ID")]
        public int ID { get; set; }
        /// <summary>
        /// 手机号
        /// </summary>
        [Column("Mobile")]
        public string Mobile { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        [Column("Password")]
        public string Password { get; set; }
        /// <summary>
        /// 昵称
        /// </summary>
        [Column("NickName")]
        public string NickName { get; set; }
        /// <summary>
        /// 性别 0=未知 1=男 2=女
        /// </summary>
        [Required]
        [Column("Sex")]
        public int Sex { get; set; }
    }
}

同理,在MySQL数据库中,创建表 StudentInfo,字段如 StudentInfo.cs中的[Column("列名")]相同即可,其中[Key]表示主键。

 在 Common 文件夹中添加 MySqlDBHelper.cs 类:

 
 
using Microsoft.EntityFrameworkCore;
using TestApi.Models;

namespace TestApi.Common
{
    /// <summary>
    /// mysql类
    /// </summary>
    public partial class MySqlDBHelper : DbContext
    {
        /// <summary>
        /// 初始化
        /// </summary>
        public MySqlDBHelper() { }
        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="options"></param>
        public MySqlDBHelper(DbContextOptions<MySqlDBHelper> options) : base(options) { }
        /// <summary>
        /// StudentInfo表映射
        /// </summary>
        public DbSet<StudentInfo> StudentInfo { get; set; }

        /*
            如果有多个表,则同方法创建即可
            public DbSet<User> User { get; set; }
            public DbSet<Test> Test { get; set; }
         */
    }
}

在Program.cs类添加服务依赖:

#region MySQL服务
// MySQL服务
builder.Services.AddDbContext<MySqlDBHelper>(opt => {
    string connectionString = builder.Configuration.GetSection("ConnectionStrings:DefaultConnection").Value;
    var serverVersion = ServerVersion.AutoDetect(connectionString);
    opt.UseMySql(connectionString, serverVersion);
});
#endregion

测试使用, 在控制器接口中使用,打开UserInfoController.cs 添加代码:

 

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using TestApi.Common;
using TestApi.Models;

namespace TestApi.Controllers
{
    [Route("[controller]/[action]")]
    [ApiController]
    public class UserInfoController : ControllerBase
    {
        private readonly JwtHelper _jwt;
        private readonly RedisHelper _redis;
        private readonly MySqlDBHelper _mysqlDb;
        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="jwtHelper"></param>
        public UserInfoController(JwtHelper jwtHelper, RedisHelper redis, MySqlDBHelper mySqlDb)
        {
            _jwt = jwtHelper;
            _redis = redis;
            _mysqlDb = mySqlDb;
        }
        /// <summary>
        /// 获取Token
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult GetToken(UserInfo user)
        {
            //参数验证等等....
            if (string.IsNullOrEmpty(user.UserName))
            {
                return Ok("参数异常!");
            }
            //这里可以连接mysql数据库做账号密码验证
            StudentInfo newData = _mysqlDb.StudentInfo.FirstOrDefault(stu => stu.Mobile == user.UserName && stu.Password == user.Password);
            if (newData == null)
            {
                return Ok("账号不存在或者密码错误!");
            }
            else
            {
                //账号存在
            }
            //这里可以做Redis缓存验证等等
            _redis.GetDatabase().StringSet("Name", user.UserName);// 往Redis里面存入数据
            string name = _redis.GetDatabase().StringGet("Name");// 从Redis里面取数据

            //这里获取Token,当然,这里也可以选择传结构体过去
            var token = _jwt.CreateToken(user.UserName, user.PhoneNumber);
            return Ok(token);
        }
        /// <summary>
        /// 获取自己的详细信息,其中 [Authorize] 就表示要带Token才行
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Authorize]
        public IActionResult GetSelfInfo()
        {
            //执行到这里,就表示已经验证授权通过了
            /*
             * 这里返回个人信息有两种方式
             * 第一种:从Header中的Token信息反向解析出用户账号,再从数据库中查找返回
             * 第二种:从Header中的Token信息反向解析出用户账号信息直接返回,当然,在前面创建Token时,要保存进使用到的Claims中。
            */
            return Ok("授权通过了!");
        }
    }
}

然后就可以F5做测试了。

接下一篇文章,将介绍Docker的使用:

C# ASP.NET Core Web API Docker使用教程(四)_c# docker怎么使用_蛋蛋の微笑的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/u012402739/article/details/128467070
今日推荐