.NET 6 轻量级 WebApi 框架 FastEndpoints 入门

news/2024/10/9 11:55:30/

(一)前言

        前段时间我从公众号:dotNET跨平台了解到了一个webapi框架叫:基于 .NET 6 的轻量级 Webapi 框架 FastEndpoints (qq.com)

        随后觉得可以试试,然后就去搜索了一下,不过网上的资料比较少,可能是由于该框架出来的不久,毕竟.NET 6 也没发布多久,但是官网也提供了不少资料:FastEndpoints (fast-endpoints.com)

        又到了充电学习的时间,然后我就开始按照公众号的文章一步一步操作,发现这文章也是用的官方的快速入门教程的一部分,但是里面有些代码和解释不完整,导致我卡在了一些地方,没办法还是得在官网和github上去扒拉。

        最终就有了我接下来要分享的内容:利用vs2022建一个webapi的服务程序,写两个api,写两个api,一个是添加用户,一个是获取token,这样就会涉及到数据库的查询、新增、修改。以及token的认证,以及swagger的配置,数据使用的是MongoDB,平时我是用的mysql,但是官网用的是这个,还有个原因就是觉得自己也该接触一下这些数据库,得试试了。

        分享的内容对于FastEndpoints整个框架的内容来说确实只有一小部分内容,但是已经够引入门了,更深入的得自己根据需求去深入去学习,生产环境中遇到的需求在官网的上基本都有解决方案。

        虽然我没有深入去了解了,但是个人感觉了一下这样的WebAPI确实比之前的方便快捷了不少,效率也快了不少,我个人觉得挺实用的,因为现在都微服务了,一个服务的api功能本来就比较专一,用这个框架来做个人觉得问题不大,虽然我没有用到生产环境。

参考资料整理:

1.FastEndpoints官网:快速端点 (fast-endpoints.com)

2.官方示例文章:在 .net 6 中构建 REST API 非常简单!- 开发社区 👩 💻👨 💻 (dev.to)

3.官方示例项目文件:https://codeload.github.com/dj-nitehawk/MiniDevTo/zip/refs/heads/main

4.完整的官方示例教程:Get Started | FastEndpoints (fast-endpoints.com)

5.我的项目文件:GitHub - LYD2015/MyFastEndpoints,就是下面分享类容的项目,建议下载后对照看。

建议:先看看官网的快速构建,以及部分思想介绍,因为下面我只是分享项目怎么写的,思想方面需要自己慢慢悟。

(二)创建项目

        话不多说,我们可以可以开始了,下面采用图文方式来介绍,也要注意图片上的笔记文字哦。

1.创建一个空的WebAPI项目

2.引入需要的nuget包

 3.创建结构目录

        我的这个目录结构是根据官网的例子以及结合自己以前开发一些项目的经营简单建立的一个目录结构。简而言之来说,官网的例子或者说是FastEndpoints思想的其中一点就是每一个API一个文件夹,每个文件夹下面都有几个API需要的.cs文件。

4.修改程序入口文件Program.cs   

        没有写注释的就是建项目自动生成的。

global using FastEndpoints;
global using FastEndpoints.Security;
global using MyWebApp.Consts;
using FastEndpoints.Swagger;
using MongoDB.Entities;var builder = WebApplication.CreateBuilder();
builder.Services.AddFastEndpoints();//FastEndpoints框架核心
builder.Services.AddAuthenticationJWTBearer(SysConst.TokenSigningKey);//添加jw认证
builder.Services.AddSwaggerDoc(addJWTBearerAuth:true);//添加swagger,并在swagger上显示输入token的按钮var app = builder.Build();
app.UseAuthentication();//启用jw认证
app.UseAuthorization();
app.UseFastEndpoints();//启用FastEndpoints框架核心
app.UseOpenApi();//启用swagger扫描api
app.UseSwaggerUi3(s => s.ConfigureDefaults());//默认配置启用swagger的uiawait DB.InitAsync(database: "FastEndpoints_TestDB", host: "localhost");//配置连接到我本地的MongoDB数据库app.Run();

对了,到这里你得去安装一个MongoDB的数据库,直接去官网下载就可以安装就可以,没用过的小伙伴在网上找安装教程时注意,基本都过时了,现在MongoDB安装的时候已经不用手动配置了,我就是安装好了之后直接用Navicat Premium 15连接就可以用了。

5.到此处你可以启动项目试试,但是会报出以下错误:

错误翻译过来的意思是:FastEndpoints无法找到任何端点声明!。也就是说一个API都没有,那我们就去写个API了。

(三)编写业务API

1.写一个AddUser的API,也就是像用户表里加一个用户。这样的话我们得先建一个UserInfo的实体。 

 

 2.实体建完了,该去建一个终端了,也就是API。

 

 

 

3.到此处可以再次运行,然后在浏览器中输入swagger地址,就可以看到这个API了。

当然此时使用swagger请求接口是不行的,因为还有token验证。好了,那在写一个获取token的API吧。

4.写一个登录获取token的API

        其实方法和上面的一样,我就在截个图示意一下:

 

好了,这样的话就可以在此运行,然后先在/user/loginAPI上获取一个token,这个API是允许匿名访问的,如下图

 swagger访问结果如下:

 把这个结果拿到下图位置,就可以去访问添加用户的API了

 添加用户成功后,在数据库可以看到如下图的两条数据

 到这里就可以结束了,基本东西都有了,剩下的就是业务逻辑的问题。弄懂了之后其实蛮简单的。当然再深入之的话可能又会踩很多坑,毕竟新东西都是这样的,欢迎大家把踩的坑和解决方案留言下来。


http://www.ppmy.cn/news/563696.html

相关文章

freemind 要下载java_FreeMind下载、安装及使用介绍

今天要给大家介绍的一款GTD类的软件是---FREE Mind,他本身是一款Mind Map软件,就是帮你把你脑子里的草图用“节点”和“连线”绘制出来的软件 他和同类软件相比有着简单实用、开源免费、中文化程度高的特点(我一直很钟爱开源软件)。 安装这款软件之前需要…

HTML5思维脑图插件推荐

** 一、jsMind ** jsMind 是一个显示/编辑思维导图的纯 javascript 类库,其基于 html5 的 canvas 进行设计。jsMind 以 BSD 协议开源,在此基础上你可以在你的项目上任意使用。你可以在此浏览适用于 jsMind 的 BSD 许可协议(中英文版本)。 官网地址 核…

解决谷歌、qq、edge、360、火狐浏览器打不开Axure原型图问题

一、谷歌、qq、edge、360 第一步:下载插件,解压得到一个axure-chrome-extension的文件夹。 第二步:打开Google浏览器,在地址栏中输入chrome://extensions/ 或者右上角设置——更多工具——扩展程序,打开扩展程序界面…

Linux下的free、uname、uptime、netstat、dmesg指令

文章目录 1 查看内存的使用情况:free2 查看系统与内核相关信息:uname3 查看系统运行时间和负载(uptime)4 查看端口监听:netstat5 分析内核产生的信息:dmesg 1 查看内存的使用情况:free free -m…

【计算机网络自顶向下】计算机网络期末自测题(一)答案

2019-2020 学年第 2 学期自测题答案及评分标准 (卷 1) 计算机网络 一、 填空题: 参考答案: 1 、 01000101 、11100111 3 、 100Mbps、双绞线、基带、全双工 [10Mbps 要求单位] 4 、 报文 5 、 ICMP 6 、 虚电路 7 、 距离矢量、链路状态 …

毫米波雷达系统性能参数分析

毫米波雷达系统性能参数分析 1、距离2、速度3、角度 本文主要分析描述雷达系统的系统性能的一些参数,包括最大作用距离,距离分辨率,最大探测速度……等参数。通过理解这些参数的组成,能够帮助我们设计雷达系统参数。 1、距离 &a…

电脑白屏后怎么办??

1.长按电源键,使电脑进入待机页面。 2.在待机页面选择重启即可

Vue-android7.0手机下加载白屏

问题记录一下. vue在7.0的android手机上, 出现白屏, js加载失败. 排除publishPath 检查路由问题. 设置路由的时候, 不能使用"..."展开数组 打开页面白屏, this.list {...this.list} 换成this.$forceUpdate()