一、各个文件夹是什么意思?
CacheHelper:给InMemory存储器
InMemory存储器【官方文档自带的】,副存储器SlaveController也没有用上
mappingProfile:原本想映射,也没用上
SelfStarting.cs:在桌面生成这个图标,可以直接点击它运行后端代码。【但是如果在后端中修改了代码的话,那必须还是得在后端代码处运行】
socket文件夹:用于和opc ua客户端通信
WebSocket文件夹【没用上,旧思路是使用session和cookie进行身份验证。现在使用token了】)
1>WebSocketClientCollection.cs:所有WebSocket的连接对象存储列表,包括一些处理函数,可扩展
2>SessionIdCollection.cs:和上述文件合用,存储session的副本,用于保证session过期之后描述断开websocket的用户id
3>WebSocketMiddleware.cs:Websocket中间件处理类,在中间件的管道顺序当中,包括中间件类文件处理的模板。接收识别WebSocket连接请求,存储,包括简单的消息转发和处理。
Handle文件夹:
CreateId.cs:生成随机的ID,九位数,第一位可以指定,传入参数为char类型
SendEmail.cs:邮件发送类;
sha256.cs:SHA256加密算法封装,传入字符串,返回加密后的字符串;
sql.cs:原生的SQL查询函数,可以直接用
Contexts【等于前面的Enitites,DbSet里面有Upddate、Delete等,可以对数据库中的数据进行修改】:添加数据库上下文
Models【就是前面的展示层,这里对应的是在前端展示的数据接口(就是第11讲的Models)】:添加模型类。是Contexts里面的每个表格的数据类型(有哪些列,列有什么用) 加新功能,改这三个文件就行了
appsettings.json:配置连接的数据库地址
二、按照官方文档教程创建项目,各个文件夹的理解
教程:使用 ASP.NET Core 创建 Web API | Microsoft Learn了解如何使用 ASP.NET Core 生成 Web API。https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api?view=aspnetcore-7.0&source=recommendations&tabs=visual-studio
三、Controller各个部分【对应Restful风格】详解
1、[HttpGet]
1>IActionResult<>和ActionResult<>,.NET6第2讲八、
IActionResult类型,只返回状态码。
ActionResult 类型:返回状态码和返回值类型
2>async
和 await
关键字用于定义和等待异步方法的执行
3>Task<>
类型表示异步操作的结果或状态
4> IEnumerable<>
接口用于表示可以枚举的集合。
async
关键字:async
关键字用于标记一个方法为异步方法。它告诉编译器该方法内部可能有异步操作,并且该方法将返回一个Task
或Task<T>
。- 异步方法允许你在不阻塞调用线程的情况下执行耗时操作,如I/O操作或长时间运行的计算。
- 在异步方法内部,你可以使用
await
关键字来等待异步操作的完成。
await
关键字:-
等待异步操作完成:
await
关键字用于等待一个返回Task
或Task<T>
对象的异步方法完成。当异步操作完成后,await
表达式会返回异步操作的结果(如果有的话)。 -
只能在异步方法中使用:
await
关键字只能在标记为async
的方法内部使用。如果尝试在同步方法或构造函数中使用await
,编译器将报错。 -
不阻塞线程:就理解成等待这个操作完成后才会执行下面的代码
-
Task<>
类型:Task<>
是一个泛型类型,它表示一个可以异步执行的操作。Task<T>
表示一个返回类型为T
的异步操作,而Task
(没有泛型参数)表示一个不返回值的异步操作。Task
和Task<T>
都提供了状态信息,如操作是否已完成、是否已取消或是否发生了异常。- 异步方法通常返回
Task
或Task<T>
,以便调用者可以等待操作的完成或获取操作的结果。
IEnumerable<>
接口:IEnumerable<>
是一个泛型接口,它用于定义可以按顺序访问其成员的集合。IEnumerable<T>
表示一个可以枚举其元素的类型为T
的集合。- 实现
IEnumerable<T>
接口的集合可以使用foreach
循环进行迭代。 IEnumerable<T>
通常用于表示可能包含多个元素的集合,但集合的具体类型和实现是未知的或可变的。
2、[HttpGet("{id}")]
3、[HttpPut("{id}")]:改(扑gai)
1>try-catch:如果在try
块内的代码执行期间发生了异常(即一个运行时错误),那么程序的控制流会立即从异常发生点跳转到与该try
块相关联的catch
块(如果存在的话)。
2>return NoContent():表示请求已成功处理,但响应体不包含任何内容。
4、[HttpPost]:增
1>nameof():获取名称。
当你使用nameof
时,你实际上是在引用代码中的一个标识符(如变量名、属性名、方法名等)。这意味着如果那个标识符在后续的代码重构中被重命名,所有使用nameof
的地方都会自动更新