当前位置: 首页 > 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;中问用一个空…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...