基于.NET6搭建WebAPI项目

这篇具有很好参考价值的文章主要介绍了基于.NET6搭建WebAPI项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建项目

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目 点击运行后自动打开浏览器,看到如下信息:

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

系统启动日志如下:

基于.NET6搭建WebAPI项目

 修改返回数据的时间格式

基于.NET6搭建WebAPI项目

此数据对用户不友好。

nuget安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson

 基于.NET6搭建WebAPI项目

安装成功:

基于.NET6搭建WebAPI项目 只需要在Program.cs 文件下添加几行代码
找到builder.Services.AddControllers()

 基于.NET6搭建WebAPI项目

代码如下:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //格式化时间
    });

 测试结果如下:

基于.NET6搭建WebAPI项目

开启Swagger 注释

打开Xml文件生成,右键项目进入属性设置:

基于.NET6搭建WebAPI项目

取消未进行注释而进行提示的警告:

基于.NET6搭建WebAPI项目

然后Progarm.cs 添加如下代码 

 基于.NET6搭建WebAPI项目

代码如下:

builder.Services.AddSwaggerGen(options => 
{
    //获取xml文件名称
    var xmlFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    //包含注释,第二个参数表示是否显示控制器注释
    options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFileName), true);
});

 在测试控制器中添加注释进行测试:

基于.NET6搭建WebAPI项目

测试ok:

基于.NET6搭建WebAPI项目 添加版本控制:

首先创建一个枚举类:

代码:

namespace IIoT.WebAPI
{
    /// <summary>
    /// API版本枚举
    /// </summary>
    public enum APIVersion
    {
        /// <summary>
        /// v1版本
        /// </summary>
        v1,
        /// <summary>
        /// v2版本
        /// </summary>
        v2,
    }
}

然后Progarm.cs 添加如下代码 :

//显示多个文档
    typeof(APIVersion).GetEnumNames().ToList().ForEach(version =>
    {
        //添加文档介绍
        options.SwaggerDoc(version, new OpenApiInfo
        {
            Title = "海云物联项目",
            Version = version.ToString(),
            Description = $"海云物联项目:{version}版本"
        });
    });

 还有如下代码:

 //版本切换
    app.UseSwaggerUI(options =>
    {
        typeof(APIVersion).GetEnumNames().ToList().ForEach(version =>
        {
            options.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"版本选择:{version}");
        });
    });

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

在测试控制器方法中添加版本控制特性:

基于.NET6搭建WebAPI项目

 运行项目进行测试:

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

引入SqlSugar 

官网文档:

SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网https://www.donet5.com/Home/Doc

nuget安装SqlSugarCore :

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

注入IoC容器:

基于.NET6搭建WebAPI项目

使用第二种方式进行注入:

创建扩展类:

创建目录Extensions:

代码如下:

using SqlSugar;

namespace IIoT.WebAPI.Extensions
{
    /// <summary>
    /// Sqlsugar扩展类
    /// </summary>
    public static class SqlsugarSetup
    {
        public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration, string dbName = "db_master")
        {
            SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig()
            {
                DbType = DbType.MySql, //数据库类型
                ConnectionString = configuration.GetConnectionString(dbName), //连接字符串
                IsAutoCloseConnection = true, //是否自动关闭连接
            },
            db =>
            {
                //单例参数配置,所有上下文生效
                db.Aop.OnLogExecuting = (sql, pars) =>
                {
                    Console.WriteLine(sql); //输出sql
                    Console.WriteLine(string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value))); //查看执行的sql语句
                };
            });
            services.AddSingleton<ISqlSugarClient>(sqlSugar); //这边是SqlSugarScope用AddSingleton
        }
    }
}

 基于.NET6搭建WebAPI项目

配置数据库连接字符串:

"ConnectionStrings": {
    "db_master": "server=127.0.0.1;Database=test_sqlsugar;Uid=root;Pwd=ghy@123;Allow User Variables=True;"
  }

基于.NET6搭建WebAPI项目

 创建一个空的数据库:

基于.NET6搭建WebAPI项目

导入sql脚本:

基于.NET6搭建WebAPI项目

包含如下表:

基于.NET6搭建WebAPI项目

基于官方提供的代码生成器生成实体类:

基于.NET6搭建WebAPI项目

 配置数据库:

基于.NET6搭建WebAPI项目

验证是否成功

有效链接会显示成 true ,库已建会显示成true  那么就代表配置成功了,如果不成功请手动建库和检查字符串

基于.NET6搭建WebAPI项目

点击菜单

基于.NET6搭建WebAPI项目

 选择数据库:

基于.NET6搭建WebAPI项目

点击导入:

导入表:

基于.NET6搭建WebAPI项目 导入完成:

基于.NET6搭建WebAPI项目

 导入完成我们可以点预览或者生成 去生成代码 

基于.NET6搭建WebAPI项目

生成的文件如下:

基于.NET6搭建WebAPI项目

将其拷贝到models文件夹下面:

基于.NET6搭建WebAPI项目

 创建控制器:用于管理岗位信息。

基于.NET6搭建WebAPI项目

 最好还是选择第二个:

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

运行测试:

基于.NET6搭建WebAPI项目

 构建仓储模式

创建Repositories文件夹:

创建公共仓储类:

代码如下:

using SqlSugar;

namespace IIoT.WebAPI.Repositories
{
    /// <summary>
    /// 公共仓储类
    /// </summary>

    public class BaseRepository<T> : SimpleClient<T> where T : class, new() //固定写法
    {
        public BaseRepository(ISqlSugarClient context = null) : base(context) //注意这里要有默认值null
        {

            base.Context = context; //ioc注入的对象
        }

        /// <summary>
        /// 扩展方法,自带方法不能满足的时候可以添加新方法
        /// </summary>
        /// <returns></returns>
        public List<T> CommQuery(string json)
        {
            //base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做复杂操作
            return null;
        }

    }
}

创建岗位信息仓储类:

SysPostRepository:

继承的时候指定类型为SysPost,那么SysPostRepository的所有操作都是针对SysPost表的:

代码如下:

using IIoT.WebAPI.Models;

namespace IIoT.WebAPI.Repositories
{
    /// <summary>
    /// 岗位仓储类
    /// </summary>
    public class SysPostRepository: BaseRepository<SysPost>
    {
        /// <summary>
        /// 查询所有岗位信息
        /// </summary>
        /// <returns></returns>
        public List<SysPost> GetSysPosts()
        {
            return base.Context.Queryable<SysPost>().ToList();
        }
    }
}

控制器中进行相关IoC注入操作:

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

注意:上述修改有错误,只需要创建公共仓储类即可。

using SqlSugar;

namespace IIoT.WebAPI.Repositories
{
    /// <summary>
    /// 公共仓储类
    /// </summary>

    public class Repository<T> : SimpleClient<T> where T : class, new() //固定写法
    {
        public Repository(ISqlSugarClient context = null) : base(context) //注意这里要有默认值null
        {

            base.Context = context; //ioc注入的对象
        }

        /// <summary>
        /// 扩展方法,自带方法不能满足的时候可以添加新方法
        /// </summary>
        /// <returns></returns>
        public List<T> CommQuery(string json)
        {
            //base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做复杂操作
            return null;
        }

    }
}

基于.NET6搭建WebAPI项目

然后修改Program.cs文件:

基于.NET6搭建WebAPI项目

运行测试:

 基于.NET6搭建WebAPI项目

异步创建webapi:

控制器代码如下:

[HttpGet("{id}")]
        public Task<SysPost> GetSysPostById(int id)
        {
            return this._sysPostRepository.GetByIdAsync(id);
            //return "value";
        }

非常简介。

添加FluentValidation 数据校验

Nuget 安装FluentValidation.AspNetCore:

基于.NET6搭建WebAPI项目

基于.NET6搭建WebAPI项目

依赖注入:

代码如下:

//注入数据校验
builder.Services.AddFluentValidation(option =>
{
    option.RegisterValidatorsFromAssembly(Assembly.GetExecutingAssembly());
});

 创建Validations文件夹:

创建实体类对应校验类:

using FluentValidation;
using IIoT.WebAPI.Models;

namespace IIoT.WebAPI.Validations
{
    public class SysPostValidation: AbstractValidator<SysPost>
    {
        public SysPostValidation()
        {
            //对每个字段进行单独校验
            RuleFor(it=>it.PostName)
                .NotEmpty().WithMessage("岗位名称不能为空!");
        }
    }
}

基于.NET6搭建WebAPI项目

测试情况:

 基于.NET6搭建WebAPI项目

跨域问题处理 

在主文件中进行配置:

//注入跨域
builder.Services.AddCors(c =>
{
    c.AddPolicy("Cors", policy =>
    {
        policy.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();
    });
});
app.UseCors("Cors"); //配置跨域组件,注意添加的顺序

基于.NET6搭建WebAPI项目

 JWT认证

创建Common文件夹:83687988

创建JwtHelper类:

using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

namespace IIoT.WebAPI.Common
{
    /// <summary>
    /// Jwt帮助类
    /// </summary>
    public static class JwtHelper
    {
        /// <summary>
        /// 创建Jwt字符串
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static string CreateJwt(TokenModelJwt model)
        {
            var claims = new List<Claim>
            {
                new Claim("UserId",model.UserId.ToString()), //保存用户Id
                new Claim("UserName",model.UserName), //保存用户名称
                new Claim("Role", model.Role) //保存用户角色
            };

            /*
            //秘钥 分开的写法
            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(model.Secret));
            var creds = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(model.Secret)), SecurityAlgorithms.HmacSha256);
            */

            var jwt = new JwtSecurityToken(
                issuer: model.Issuer,
                audience: model.Audience,
                expires: DateTime.Now.AddSeconds(model.Expires),
                signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(model.Secret)), 
                SecurityAlgorithms.HmacSha256),
                claims: claims
            );

            /* 分开的写法
            var jwtHandler = new JwtSecurityTokenHandler();
            var token = new JwtSecurityTokenHandler().WriteToken(jwt);
            */

            return new JwtSecurityTokenHandler().WriteToken(jwt);
        }

        /// <summary>
        /// 解析Jwt字符串并转换为TokenModelJwt对象
        /// </summary>
        /// <param name="jwtStr"></param>
        /// <returns></returns>
        public static TokenModelJwt SerializeJwt(string jwtStr)
        {
            //解析token
            var jwtToken = new JwtSecurityTokenHandler().ReadJwtToken(jwtStr);
            var tokenJwt = JsonConvert.DeserializeObject<TokenModelJwt>(jwtToken.Payload.SerializeToJson());
            return tokenJwt;
        }

    }
    
    /// <summary>
    /// 令牌对象
    /// </summary>
    public class TokenModelJwt
    {
        /// <summary>
        /// 用户Id
        /// </summary>
        public int UserId { get; set; }
        /// <summary>
        /// 用户名称
        /// </summary>
        public string UserName { get; set; }
        /// <summary>
        /// 发行人
        /// </summary>
        public string Issuer { get; set; }
        /// <summary>
        /// 观众
        /// </summary>
        public string Audience { get; set; }
        /// <summary>
        /// 秘钥
        /// </summary>
        public string Secret { get; set; }
        /// <summary>
        /// 过期时间
        /// </summary>
        public int Expires { get; set; }
        /// <summary>
        /// 角色
        /// </summary>
        public string Role { get; set; }
    }
}

基于.NET6搭建WebAPI项目

配置文件配置:

 "Jwt": {
    "Secret": "asdasfdgsdgtrhythyjyukjtyujgfjgfhjyjr", //不要太短,16位+
    "Issuer": "haiyun",
    "Audience": "haiyun"
  }

 基于.NET6搭建WebAPI项目

创建Jwt控制器:

using IIoT.WebAPI.Common;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace IIoT.WebAPI.Controllers
{
    /// <summary>
    /// Jwt控制器
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class JwtController : ControllerBase
    {
        private readonly IConfiguration _configuration;

        public JwtController(IConfiguration configuration)
        {
            this._configuration = configuration;
        }

        /// <summary>
        /// 获取Jwt字符串
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public string CreateToken()
        {
            var tokenModel = this._configuration.GetSection("Jwt").Get<TokenModelJwt>(); //获取TokenModelJwt对象
            tokenModel.UserName = "ghy";
            tokenModel.UserId = 1;
            tokenModel.Role = "Admin";
            tokenModel.Expires = 60 * 30; //过期时间默认设置为30min
            return JwtHelper.CreateJwt(tokenModel);
        }
    }
}

 基于.NET6搭建WebAPI项目

 运行测试:

基于.NET6搭建WebAPI项目

swagger添加jwt配置:

然后再Promgram.cs 加上Jwt的验证:

注意jwt部分的内容相对复杂,这里不再做介绍.文章来源地址https://www.toymoban.com/news/detail-402342.html

到了这里,关于基于.NET6搭建WebAPI项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux系统上创建.NET6项目(通过命令行(CTL)方式)

    平时大家创建项目基本上都是借助开发工具创建,比如visual studio,visual studio code,今天我们在Linux系统上,通过命令行的形式创建.NET6项目。 第一个直接安装 如图所示,即.NET环境安装成功。 我们以webapi为例,演示创建项目的过程。 认识dotnet相关命令 经常会用到的命令。 认

    2024年02月03日
    浏览(26)
  • 如何在.net6webapi中实现自动依赖注入

    IOC(Inversion of Control)控制反转: 控制反正是一种设计思想,旨在将程序中的控制权从程序员转移到了容器中。容器负责管理对象之间的依赖关系,使得对象不再直接依赖于其他对象,而是通过依赖注入的方式来获取所需的资源。 DI(Dependency Injection)依赖注入: 他是IOC的具

    2024年02月08日
    浏览(24)
  • 如何在.net6webapi中配置Jwt实现鉴权验证

    jwt是一种用于身份验证的开放标准,他可以在网络之间传递信息,jwt由三部分组成:头部,载荷,签名。头部包含了令牌的类型和加密算法,载荷包含了用户的信息,签名则是对头部和载荷的加密结果。 jwt鉴权验证是指在用户登录成功后,服务器生成一个jwt令牌并返回给客户

    2024年02月07日
    浏览(32)
  • .Net Core6.0 WebAPI项目框架搭建六:仓储模式+导入SqlSuagr

     完整框架项目源码地址:https://download.csdn.net/download/yigu4011/87788956?spm=1001.2014.3001.5503 仓储(Respository)是对数据库访问的一个封装 解决方案新建Respository文件夹,新建类库Web.Core.IRepository,Web.Core.Repository 解决方案新建Services文件夹,新建类库Web.Core.IServices,Web.Core.Services 在类库

    2024年01月18日
    浏览(43)
  • .NET6 项目使用RabbitMQ实现基于事件总线EventBus通信

    一、概念及介绍         通常通过使用事件总线实现来执行此发布/订阅系统。 事件总线可以设计为包含 API 的接口,该 API 是订阅和取消订阅事件和发布事件所需的。 它还可以包含一个或多个基于跨进程或消息通信的实现,例如支持异步通信和发布/订阅模型的消息队列或

    2024年04月28日
    浏览(31)
  • .NET6创建Windows服务

    之前的文章已经写过了创建Windows服务。 C#创建Windows服务_c# 创建windows服务_故里2130的博客-CSDN博客  不过之前使用的是.NET Framework创建的Windows服务。现在已经2023年了,其中vs2022有新的方法去创建Windows服务,本次使用.NET6创建Windows服务。 1.选择如图所示,其中vs2022这样的,vs

    2024年02月10日
    浏览(24)
  • .NET6入门:2.使用模板创建.NET Core Web

                    在目前B/S盛行的时代,本文将通过创建一个.NET Core Web模板的方式来带领大家进入.NET6开发的大门。         1.1 打开Visual Studio(不同版本VS可能创建新项目所在位置不同),单击创建新项目。         1.2 选择C#语言和Web平台,在下面的项目中选中ASP.NET Core Web应

    2024年02月12日
    浏览(28)
  • .Net初学 创建一个巨简单的.Net7 WebApi后端框架

    visual studio 2022 以下简称vs    Visual Studio安装指南_visual studio安装教程_技术人小柒的博客-CSDN博客 sqlserver 2022 以下简称mssql        SQL Server2022 Express和SSMS下载安装教程(超详细) (baidu.com) redis Redis下载安装图文教程(Windows版_超详细)_windows redis下载_Leeway啊樺的博客-CSDN博客

    2024年02月21日
    浏览(27)
  • 从壹开始前后端开发【.Net6+Vue3】(二)前端创建

    工作后,学习的脚步一直停停走走,希望可以以此项目为基础,可以不断的迫使自己不断的学习以及成长 将以Girvs框架为基础,从壹开始二次开发一个前后端管理框架 在这过程中一步步去学习使用到的技术点,也同时会将在此过程中遇到的问题进行分享 项目地址 上文介绍到

    2024年02月10日
    浏览(27)
  • .net core 创建WebAPI以及使用EF DBFirst框架使用方法与疑问解答(.net 6)

    EF语法包: 生成实体模型: 修改实体模型: 把生成的实体和上下文都输出到某个文件夹命令 增加JSON格式脚手架: 若想增加某个版本json脚手架,需要加入后缀如: 问题与解决方案: 1、问题: Your startup project \\\'XXX\\\' doesn\\\'t reference Microsoft.EntityFrameworkCore.Design. This package is requi

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包