今天看到来自 https://www.dotnetdeveloper.cn/ 的一个 .NET 6 Minimal API 系列,感觉质量不错,特别收录在这里。
.Net 6探索 (1) Minimal API介绍
随着.Net 6发布,我们也来探索一下.Net 6。 随着.Net 6发布的同时,C# 10.0也会随之发布,在C# 10.0中为了.Net 6的发布,语言级别集成了很多新特性, 这些特性主要有: Top-level statements async main Global using directives ( 基于SDK的隐式global using) File-scoped名称空间 new表达式类型推断 空引用类型 关于这些新特性,我们之前的一个整个系列都简单的介绍过这些新特性
.Net 6探索(2)WebApplication简介
我们前面学习了minimal api的快速入门,我们了解到,针对于.Net 6主要推出了两个非常重要的类WebApplication和WebApplicationBuilder我们从本章开始学习一下相关的新类的用法。 本章学习WebApplication。 WebApplication 快速运行一个hello world 我们先来看如何从一个minimal api来创建一个应用。
.Net 6探索(3)WebApplicationBuilder简介
前面我们快速的学习了WebApplication, 我们这一章来快速的学习一下WebApplicationBuilder, 在学习之前我们先理解一下WebApplication和WebApplicationBuilder, 从这两个类的名字上大致也能猜测到WebApplicaiton代表的是运行的应用,而后一个则是为了运行该应用的配置类,因此您也会看到下述的各种用法: 改变应用content root, app name以及环境变量
.Net 6探索(4)路由
.Net6和之前的版本相比,最大的不同是改进了路由的配置方法,你可以在WebApplication上使用各种Map方法来处理处理
.Net 6探索(5)参数绑定
参数绑定时指如何将请求的数据转换到强类型的路由处理方法的参数的过程,请求数据的来源决定了路由处理方法参数的来源,绑定来源可以明确指定,也可以根据HTTP方法进行推断。 目前支持如下的绑定源 路由值 查询字符串 头 请求体(Body as Json) 通过DI容器提供的服务 自定义的来源 注意 从表单绑定不是native支持的。
.Net 6探索(6)返回结果(Response)
路由处理方法支持如下几种类型的返回值: 基于IResult的返回值: 包括Task ,ValueTask 字符串string: 包括 Task 以及 ValueTask 其他类型(T) Return value Behavior Content-Type IResult The framework calls IResult.ExecuteAsync Decided by the IResult implementation string
.Net 6探索(7)授权(Authorization)和CORS
路由可以通过使用Authorization policy进行保护,可以通过Authorize属性或者方法RequriredAuthorization来定义。
.Net 6探索(8) OpenAPI
可以使用Swashbuckle来描述OpenAPI详细说明. 下面的例子是一个典型的ASP.net Core应用,并启用了OpenAPI支持
.Net 6探索(9) ConfigurationManager类
.Net6中为了简化基于Asp.Net Core的应用,新增加了新的类型WebApplication和WebApplicationBuilder, 其实个人感觉应该将WebApplication和Application分开,类似于我们曾经将WebHost和GenericHost分开一样,为了更好的配合新增加的两个类,整个框架中有一些类也做出了改变,ConfigurationManager就是其中之一。 但是为什么我们需要添加一个新的类来重新表述框架中的配置部分呢? .Net6之前的配置类有什么问题嘛?
.Net 6 探索(10) 从WebHost、GenericHost到WebApplicationBuilder
我们从Andrew的Blog中已经学习了.Net 6中新的配置类ConfigurationManager, 以为为什么需要它,解决了什么问题,那么这一章我们来聊聊Asp.net Core关于配置应用的历史过往。 从Asp.net Core 2.x到3.x, 到5.x以及到现在的6, 历史上采用了如下几种配置应用的方式
探索.Net 6(11) 探索WebApplicationBuilder
我们之前的文章已经介绍过了很多关于.Net的新特性,例如top level statement以及global using等等,除了这些新特性之外,还提供了两个新的类型WebApplicationBuilder和WebApplication, 结合新类型以及新特性,使得配置一个Asp.net Core的应用非常简单:
探索.Net 6(12)使用WebApplication
和我们之前的文章学习的一样,我们基本可以认为WebApplicationBuilder配置所有的应用,但是WebApplication是为了创建一个应用,针对于我们的Web应用,主要就是我们的中间件。 WebApplication相当于是三个类型的封装,
.Net 6探索(13)使用Source Generators优化ILogger的性能
Source Generators实际上是在.Net 5中就已经提出来了概念,但是这个技术在.Net 5中并没有多少人使用,即便是.Net团队自己也没有过多的应用,随着.Net 6的发布,越来越多的库作者,以及.Net的团队开始使用该特性。该特性也非常好理解,主要是向用户提供一个可以供用户使用的C#编译器的特性,可以让用户侵入到用户代码中,并生成新的C#代码,并加入到编译中去。
.Net 6探索(14) 性能(Performance) - Benchmark工具的设定
.Net 6是第一个大一统的发型版本,微软从.Net 5开始计划将.Net Core和之前的.Net统一成一个平台,.Net 6是这个计划的第一个发布版本,根据.Net团队的blog, .Net 6在性能方面都有极大的提升。我们这篇文章好好的学习一下.Net 6中提出的一些关于性能的提升的概念以及工具。 Benchmark的设定 为了测试性能,我们需要一些工具可以用于对于或者测试性能,
.Net 6探索(15) 性能(Performance) - JIT
Code Generation指的是编译器将用户的代码翻译为IL(Intermediate language)到assembly code的过程,Code Generation几乎是所有一切的基础,因此对于Code Generation的优化直接影响了最终代码的性能,根据测试以及官方的blog, .Net 6在这个方面有着巨大的提升。
.Net 6探索(16) 性能(Performance) - GC DPAD for regions
我们在本章不会深入的探讨如何在.Net 6中进行内存分析以及性能调优,我们之后会使用其他的文档来详细的讨论这个问题,这篇文档仅仅是介绍一下在.Net 6中的对GC的重大改变。 .Net 6在GC上最重大的改变是使用新的region概念替换之前一直在使用的Segments。 为什么需要使用新的内存管理形式,主要是在过完中.Net团队观察到使用Segments带来的一些局限性,在.Net 6发布之前,终于决定启用新的设计region, 这二者最明显的区别就是Segment比Region大。
.Net 6探索(17) 性能(performance) - 线程相关
我们来看一下.Net 6在线程相关领域的提升 异步方法里调用同步方法 我们在.Net的异步编程中一直提到不要在异步方法里调用同步方法,因为这样及其容易引起性能问题和死锁问题,在异步的时候,如果在一个异步方法里调用同步方法,这个时候CLR会使用一个线程池来分配线程给异步方法运行,但是如果这个时候异步方法里的同步方法被阻塞了(例如这个需要的时间比较久), 然后有另外一个异步方法也需要一个线程,那么线程池会立即分配一个新线程给另外一个异步方法,如果在负载不大的情况下,这个是没有什么问题的, 如果这个时候负载
.Net 6探索(18) 性能(performance) - 系统类型
本章简要的介绍一下.Net 6对系统的类型的性能提升,只是简单的罗列一下供大家参考