.NET 6 探索 Minimal API 系列
今天看到来自 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对系统的类型的性能提升,只是简单的罗列一下供大家参考
.NET 6 探索 Minimal API 系列的更多相关文章
- 深入理解javascript选择器API系列第三篇——h5新增的3种selector方法
× 目录 [1]方法 [2]非实时 [3]缺陷 前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuer ...
- Web API系列(三)统一异常处理
前面讲了webapi的安全验证和参数安全,不清楚的朋友,可以看看前面的文章,<Web API系列(二)接口安全和参数校验>,本文主要介绍Web API异常结果的处理.作为内部或者是对外提供 ...
- Web API系列(二)接口安全和参数校验
以前简单介绍过web api 的设计,但是还是有很多朋友问我,如何合理的设计和实现web api.比如,接口安全,异常处理,统一数据返回等问题.所以有必要系统的总结总结 web api 的设计和实现. ...
- phoenix 开发API系列 目录
phoenix 开发API系列(一)创建简单的http api phoenix 开发API系列(二)phoenix 各类 api 实现方式 phoenix 开发API系列(三)phoenix api ...
- phoenix 开发API系列(三)phoenix api 结合数据库
概述 介绍了 api 的各种写法之后,下面介绍构建 api 时与数据库连接的方式. 注 下面使用的工程的完整代码已经公开在: http://git.oschina.net/wangyubin/phoe ...
- ASP.NET Web API系列教程目录
ASP.NET Web API系列教程目录 Introduction:What's This New Web API?引子:新的Web API是什么? Chapter 1: Getting Start ...
- flask开发restful api系列(8)-再谈项目结构
上一章,我们讲到,怎么用蓝图建造一个好的项目,今天我们继续深入.上一章中,我们所有的接口都写在view.py中,如果几十个,还稍微好管理一点,假如上百个,上千个,怎么找?所有接口堆在一起就显得杂乱无章 ...
- Web API系列之三 基本功能实现
Web API系列之二讲解了如何搭建一个WebApi的基架,本文主要在其基础之上实现基本的功能.下面开始逐步操作: 一.配置WebApi的路由-用于配置外部如何访问内部资源的url的规则 1.添加Gl ...
- ASP.NET Web API系列教程(目录)(转)
注:微软随ASP.NET MVC 4一起还发布了一个框架,叫做ASP.NET Web API.这是一个用来在.NET平台上建立HTTP服务的Web API框架,是微软的又一项令人振奋的技术.目前,国内 ...
- 深入理解javascript选择器API系列第三篇——HTML5新增的3种selector方法
前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuery的称赞,很多是由于jQuery方便的元素选择器 ...
随机推荐
- volatile关键字最全原理剖析
介绍 volatile是轻量级的同步机制,volatile可以用来解决可见性和有序性问题,但不保证原子性. volatile的作用: 保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了某个变 ...
- computed 中的属性名和data的属性名可以相同吗?
不可以,因为无论computed 中的属性名还是 data 又或者是props中的属性名,都会别挂载到组件实例上,所以名字都不允许重复 : ps:好比一个作用域里面不允许定义2个相同的变量名 :
- k8s的pod的理解
pod共享相同的IP地址和端口空间. 这意味着在同一 pod中的容器运行的 多个进程需要注意不能绑定到相同的端口号, 否则会导致端口冲突, 但这只涉及同一pod中的容器. 由于每个pod都有独立的端口 ...
- CentOS7.4 安装 11204 ASM GI 组件时:ohasd failed to start
前段时间某客户要求在CENTOS7上部署Oracle 11.2.0.4 single instance && ASM存储,遇到一个比较头疼的问题,好在已经处理完了. 在图形化执行安装程 ...
- C语言之常量
常量 常量,常量表达式和const关键字修饰的只读变量都存储在.rodata只读数据段中 1.字面值常量 literal 整形字面值 123, 0xff00ff 字符常量,类型总是 int, 'a', ...
- Tony Bai · Go语言第一课 _个人笔记 04|初窥门径:一个Go程序的结构是怎样的?
Tony Bai · Go语言第一课 _个人笔记 04|初窥门径:一个Go程序的结构是怎样的? 1.配置国内的Go模块的镜像 配置国内镜像代理(使用阿里云镜像) go env -w GOPROXY=h ...
- 3.11 Linux删除空目录(rmdir命令)
和 mkdir 命令(创建空目录)恰好相反,rmdir(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为: [root@localhost ~]# rm ...
- manim边学边做--立方体和棱柱体
本篇介绍Manim中创建三维立体的两个常用对象:Cube和Prism. Cube在制作动画时,可以用于展示立体几何中的立方体概念,或者通过旋转.缩放等动画效果来帮助理解三维空间中的几何变换. Pris ...
- ADMM——交替方向乘子法
ADMM(Alternating Direction Method of Multipliers,交替方向乘子法)是一种优化算法,主要用于解决分布式.大规模和非光滑的凸优化问题.ADMM通过将原始问题 ...
- Solr 的核心就是搜索
原文 http://www.aptusource.org/2014/06/searching-is-what-its-all-about/ Solr 的主要功能就是强大的查询处理.在本文中,你将会看 ...