当前位置: 首页 > news >正文

.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】

一、使用VSCode开发.NET项目

1、创建文件夹,使用VSCode打开

2、安装扩展工具

1>C#

2>安装NuGet包管理工具,外部dll包依靠它来加载

法1》:NuGet Gallery,注意要启动科学的工具

法2》NuGet Package Manager GUl,没办法从远端下载包,只能自己Install进行下载

例如导入SwashBuckle.AspNetCore包,进行Swagger配置

3>安装vscode-solution-explorer 用于管理C#项目

安装后vscode侧栏会多出一个按钮,也可以把solution移到界面上

4>安装C# Dev Kit

VS Code 中的 C# 和 .NET 入门(官方初学者指南) | Microsoft Learn

在欢迎页按照提示操作

5>安装Auto-Using for C#:编写代码时自动添加using

3、创建WebApi项目

1>创建新的solution,即解决方案

2>添加新项目

注意:.net8更新之后创建webapi没有控制器(Controller)的情况

在Visual Stdio中,不管创建.net几,勾选使用控制器就可以了

.NET Core 项目指定SDK版本-CSDN博客

dotnet new global.json --sdk-version <SDK版本号>

【在一、2、4>处可以安装SDK,在电脑“安装的应用”处可以看到安装的SDK版本号】

4、如何启动项目?

法1>按F5

法2>

法3>运行和调试

5、VSCode小技巧

1>修改launch.json文件,使项目运行时直接打开swagger网页

把上面默认打开的网址注释掉

注意: “applicationUrl”是根目录

2>忽略一些文件夹让视野变得更清晰

二、.NET5的启动流程(Startup.cs和Program.cs配合)

1、下述2、的比喻解释

  • Main 方法:家的入口,从这里开始进入。
  • CreateHostBuilder:准备建造房子的过程,包括选择材料(如配置源)和设计方案(如日志记录、服务器等)。
  • Startup.cs里面的ConfigureServices:购买家具和家电,为房子添加功能(如控制器和视图服务)。
  • Startup.cs里面的Configure:安装和配置家具和家电,使它们能够正常工作(如配置中间件管道)。
  • Run:打开家门,让家人入住,开始正常生活(如监听和处理 HTTP 请求)。

2、具体启动流程

1>项目先从Program.cs里的Main函数进来,获取参数args
1》Main方法的参数args是一个字符串数组,它包含了从命令行传递给应用程序的所有参数。
2》例如,通过终端dotnet命令去启动这个项目的时候,使用

dotnet run --urls "http://localhost:5000"

启动应用程序时,args将包含["--urls", "http://localhost:5000"]

2>创建主机构建器:Main方法中的CreateHostBuilder(args)
  • Main方法中,通常会调用CreateHostBuilder(args)方法来创建一个主机构建器(IHostBuilder)。
  • CreateHostBuilder方法内部使用Host.CreateDefaultBuilder(args)来初始化构建器,并将args传递给构建器。这样,构建器就可以使用这些参数来配置应用程序。

3>配置 Web 主机
  • ConfigureWebHostDefaults方法中,会进一步配置 Web 主机,包括设置服务器选项、中间件等。
  • 在这里,IConfiguration会被用来读取配置信息,包括从命令行参数中读取的信息。
**4>**执行Startup.cs
  • 通过调用webBuilder.UseStartup<Startup>(),指定Startup类作为应用程序的启动类。
  • Startup类包含两个主要方法:ConfigureServicesConfigure

5>**配置服务:**startup.cs里的ConfigureServices方法
  • ConfigureServices方法中,注册应用程序所需的服务到依赖注入容器中。
  • 例如,注册 MVC 控制器和视图的服务:services.AddControllersWithViews()

6>**配置中间件:**startup.cs里的Configure方法
  • Configure方法中,配置应用程序的中间件管道。
  • 中间件按照注册的顺序执行,用于处理 HTTP 请求和响应。
  • 使用Use方法将中间件添加到管道中。

7>构建主机:Main方法中的.Build()
  • Main方法中,通过调用CreateHostBuilder(args).Build()来构建和运行主机。
  • Build方法会构建并返回配置好的主机实例。

8>运行主机:Main方法中的.Run()
  • 在 7>的CreateHostBuilder(args).Build()后面,加上.Run()来运行主机。
  • Run方法会启动主机,并使其开始监听和处理请求。

三、.NET6的启动流程(在.NET5的基础上净化,只有Program.cs)

1、在主启动项目Program.cs里抛弃了类和入口函数,把它们隐匿到框架中了。

上图中代码上面的using、方法、命名空间等,都没有了,被单独地放到了另一个文件中。

2、具体启动流程:相当于把.NET5里的Startup.cs里的两个方法平铺到Program.cs里面

1>上图中第一句,var builder = WebApplication.CreateBuilder(args);

  • 使用WebApplication.CreateBuilder(args)方法来创建一个WebApplicationBuilder实例。
  • 这个构建器用于配置应用程序的服务、日志记录、配置源等。
  • args参数是从命令行传递给应用程序的参数,它们可以被用来配置应用程序的行为。
  • 等于二、1>2>3>
2>上图第二句【配置服务】,builder.Services.AddcontrollersWithViews();

  • WebApplicationBuilder实例上,你可以调用ConfigureServices方法来注册应用程序所需的服务。
  • 这与 .NET 5 中的Startup.cs文件中的ConfigureServices方法类似,但现在在Program.cs文件中完成。
  • 等于二、5>
3>上图第三句【构建 Web 应用程序】,var app = builder.Build();

  • 使用var app = builder.Build();语句来构建WebApplication实例。

  • 这个实例代表了整个 ASP.NET Core 应用程序,并提供了配置中间件管道的方法。

  • 以第三句Build为中界线,上面是ConfigureServices里面的,下面是Configure里面的。
  • 等于二、7>

4>上图第三句后面的所有app.Use【配置中间件
  • WebApplication实例上,你可以使用Use方法来配置中间件。
  • 中间件用于处理 HTTP 请求和响应,它们按照添加的顺序执行。
  • 常见的中间件包括路由、认证、错误处理等。
  • 等于二、6>
2》区别.NET5框架的执行顺序

.NET5框架是在Build()里面执行Configure方法里的Use;

.NET6框架是先Build(),用Build生成的对象app,再执行Use使用。

5>上图最后一句【运行应用程序】:app.run()
  • 最后,使用app.Run();语句来启动应用程序并使其开始监听和处理请求。
  • 等于二、8>

四、.NET6框架里最小的API:Minimal APls,具体见第2讲。

相关文章:

.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】

一、使用VSCode开发.NET项目 1、创建文件夹&#xff0c;使用VSCode打开 2、安装扩展工具 1>C# 2>安装NuGet包管理工具&#xff0c;外部dll包依靠它来加载 法1》&#xff1a;NuGet Gallery&#xff0c;注意要启动科学的工具 法2》NuGet Package Manager GUl&#xff0c…...

Git-分布式版本控制工具

目录 1. 概述 1. 1集中式版本控制工具 1.2分布式版本控制工具 2.Git 2.1 git 工作流程 1. 概述 在开发活动中&#xff0c;我们经常会遇到以下几个场景&#xff1a;备份、代码回滚、协同开发、追溯问题代码编写人和编写时间&#xff08;追责&#xff09;等。备份的话是为了…...

C++ 第10章 对文件的输入输出

https://www.bilibili.com/video/BV1cx4y1d7Ut/?p147&spm_id_from333.1007.top_right_bar_window_history.content.click&vd_sourcee8984989cddeb3ef7b7e9fd89098dbe8 &#x1f341;&#x1f341;&#x1f341;本篇为贺宏宏老师C语言视频教程文件输入输出部分笔记整理…...

【机器学习】手写数字识别的最优解:CNN+Softmax、Sigmoid与SVM的对比实战

一、基于CNNSoftmax函数进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分析 二、 基于CNNsigmoid函数进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分析 三、 基于CNNSVM进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分…...

android 聊天界面键盘、表情切换丝滑

1、我们在聊天页面时候&#xff0c;往往会遇到&#xff0c;键盘、表情、其他选择切换时候页面会出现掉下来再弹起问题&#xff0c;这是因为&#xff0c;我们切换时候&#xff0c;键盘异步导致内容View高度变化&#xff0c;页面掉下来后&#xff0c;又被其他内容顶起这种很差视觉…...

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…...

关于Git分支合并,跨仓库合并方式

关于Git合并代码的方式说明 文章目录 关于Git合并代码的方式说明前情提要开始合并方式一&#xff1a;git merge方式二&#xff1a;git cherry-pick方式三&#xff1a;git checkout Git跨仓库合并的准备事项前提拉取源仓库代码 前情提要 同仓库不同分支代码的合并可直接往下看文…...

[网络] UDP协议16位校验和

16位校验和是udp报头中的一个字段,绝大多数的教材和网课都会忽略这个字段,不去细究,我闲的蛋疼问了问ai,得到了一个答案,故作此文,以证明我爱学习之心惊天地泣鬼神(狗头 ai的回答 仅从作用来说,它会根据整个应用层报文进行运算,生成一个准确的数字,这个数字不能保证唯一性,但根…...

Vue 3 中的 `update:modelValue` 事件详解

在 Vue 3 中&#xff0c;update:modelValue​ 事件通常与 v-model​ 指令一起使用&#xff0c;以实现自定义组件的双向数据绑定。以下是对该事件的详细分析&#xff1a; 事件定义 首先&#xff0c;我们需要在组件中定义 update:modelValue​ 事件。可以使用 defineEmits​ 函…...

vue3+vite+ts 使用webrtc-streamer播放海康rtsp监控视频

了解webrtc-streamer webrtc-streamer 是一个使用简单机制通过 WebRTC 流式传输视频捕获设备和 RTSP 源的项目&#xff0c;它内置了一个小型的 HTTP server 来对 WebRTC需要的相关接口提供支持。相对于ffmpegflv.js的方案&#xff0c;延迟降低到了0.4秒左右&#xff0c;画面的…...

QT数据库(四):QSqlRelationalTableModel 类

关系数据库概念 例如下列departments、majors、studInfo 这 3 个数据表之间存在关系。 主键与外键 标记“**”的是主键字段&#xff0c;标记“*”的是外键字段。主键字段是一个数据表中表示记录唯一性的字段&#xff0c;例如 studInfo 数据表中的 studID 字段。外键字段是与其…...

蓝桥杯刷题——day5

蓝桥杯刷题——day5 题目一题干解题思路一代码解题思路二代码 题目二题干解题思路代码 题目一 题干 给定n个整数 a1,a2,⋯ ,an&#xff0c;求它们两两相乘再相加的和&#xff0c;即&#xff1a; 示例一&#xff1a; 输入&#xff1a; 4 1 3 6 9 输出&#xff1a; 117 题目链…...

YOLO11改进-模块-引入多尺度差异融合模块MDFM

遥感变化检测&#xff08;RSCD&#xff09;专注于识别在不同时间获取的两幅遥感图像之间发生变化的区域。近年来&#xff0c;卷积神经网络&#xff08;CNN&#xff09;在具有挑战性的 RSCD 任务中展现出了良好的效果。然而&#xff0c;这些方法未能有效地融合双时相特征&#x…...

vlan和vlanif

文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法&#xff0c;vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…...

Apache Kylin最简单的解析、了解

官网&#xff1a;Overview | Apache Kylin 一、Apache Kylin是什么&#xff1f; 由中国团队研发具有浓厚的中国韵味&#xff0c;使用神兽麒麟&#xff08;kylin&#xff09;为名 的一个OLAP多维数据分析引擎:&#xff08;据官方给出的数据&#xff09; 亚秒级响应&#xff…...

MySQL——连接

一.引入库 我们已经分享了很多通过命令行方式去操作数据库&#xff0c;那么数据库该怎么通过语言去访问呢&#xff1f; 这里分享怎么通过C/C来连接数据库。 首先需要到MySQL官网&#xff0c;下载专门用于C/C连接数据库的库&#xff0c;但是一般不需要再去官网下载。 因为在…...

前端微服务实战:大型应用的拆分与治理

"这个系统已经无法维护了..."周五的架构评审会上,我盯着屏幕上那张错综复杂的依赖关系图发愁。作为一个运行了三年的企业级中后台系统,代码量已经超过 50 万行,构建时间长达 40 分钟,任何修改都可能引发连锁反应。 更让人头疼的是,随着业务的快速发展,不同业务线之间…...

Linux shell的七大功能 --- history

1.直接输入“history” 这个命令可以显示出曾经使用过的命令&#xff08;最近时间的500条&#xff09; history 2.“history”命令也可以搭配其他命令一起使用。 例&#xff1a;history | grep "vim"&#xff0c;找出所有包含“vim”的记录&#xff1b; 也可以搭配…...

C++ webrtc开发(非原生开发,linux上使用libdatachannel库)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、libdatachannel库的下载和build二、开始使用 1.2.引入库3.开始使用 总结 前言 使用c开发webrtc在互联网上留下的资料甚少&#xff0c;经过我一段时间的探…...

C语言刷题

1. 题目描述 根据给出的三角形3条边a:b.c(a.b,c<100.000)&#xff0c;计算三角形的周长和面积。 输入描述: 一行&#xff0c;三角形3条边(能构成三角形)&#xff0c;中间用一个空格隔开. 输出描述: 一行&#xff0c;三角形周长和面积保留两位小数&#xff0c;中问用一个空…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...