ASP.NET Core 6 Minimal API

ASP.NET Core 6 Minimal API

Intro

微软在 ASP.NET 6 Preview 4 的介绍文章中介绍了即将到来的 ASP.NET Core 6 中的最小 API 的雏形,我们现在已经基本可以达到最小化 API 了雏形了,在 Preview 4 的时候就写了这个小示例,但是不够简洁,没有达到最简洁的代码,现在在 Preview 5 上尝试一下,感觉已经很简洁了,于是就想分享一下

Sample-0

在 Preview 4 的时候,示例是下面这样的:

using System;
using Microsoft.AspNetCore.Builder;var app = WebApplication.Create(args);
app.Map("/", (Func<string>)(() => "Hello World"));
app.Run();

主要是使用了新增的 WebApplication/WebApplicationBuilder API,然后结合了 C# 9 中的 Top-Level Statement,去掉了 Main 方法的声明

C# 10 New Features

在即将到来 C# 10 中的两个新特性可以帮助我们简化这个特性,分别是:

  • global using

  • lamdba 优化

通过 global using 这个 feature 我们可以实现命令空间的统一管理这样就可以避免写很多 namespace 的引用了,我们可以把常用的 namespace 放在一个文件中管理,类似于 MVC 中的 _ViewImports.cshtml 和 Razor Page 中的 _Imports,这样就可以简化上面的 using 了,之前看介绍说是,ASP.NET Core 6 会把 ASP.NET Core 相关的常用的命令空间通过 global using 的方式默认引用,这样上面的示例中就不需要再引用命名空间了。

另外一个 feature 则是对于 lambda 表达式的优化,可以自动进行类型推断来隐式的转换成委托,就可以简化上面强制类型转换成 Func<string> 了,就可以自动的隐式转换了,

除此之外,我们还可以方便的在 lamdba 表达式上加 Attribute 注解,这有助于大大简化 API 书写的复杂度,具体看后面的示例吧

Sample-1

使用 C# 10 新特性之后的代码:

var app = WebApplication.Create(args);
app.Map("/", () => "Hello World");
app.Run();

主要有两点变化,一个是 Func<string> 的转换不再需要了,一个是命名空间的引用,会放在一个单独 Imports 文件中添加全局的命名空间引用

Imports 内容如下:

global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Threading.Tasks;
global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.AspNetCore.Routing;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Hosting;
global using Microsoft.Extensions.Logging;
global using Microsoft.Extensions.Configuration;

上面提到了我们可以很方便在 lamdba 表达式上使用 Attribute,下面我们就来一个例子:

var app = WebApplication.Create(args);
app.MapPost("/info", [HttpPost](IWebHostEnvironment env) => new 
{Time = DateTime.UtcNow,env.EnvironmentName 
});
app.Run();

除了 Attribute,我们还可以添加参数,参数可以自动从依赖注入服务中获取,如上面的 IWebHostEnvironment

接着我们来测试一下我们的 API 看试试 work 了吧,现在我们已经可以使用 dotnet watch 来运行项目,会自动启用 Hot Reload,但是测试发现,感觉现在的 ASP.NET Core 里的 Hot Reload,还是有点问题,需要使用 Ctrl + R 来重新 build 才能生效,不知道是不是我姿势不对,不知道大家有没有遇到这样的问题,希望后面的版本能够解决这个问题

可以通过 dotnet watch 来启动项目

接着我们就可以通过 http://localhost:5000 或者 https://localhost:5001 来访问我们的 API 了

访问 http://localhost:5000,会看到下面的结果

直接访问 http://localhost:5000/info,会看到类似下面的结果,这是因为我们的 info API 只允许 POST 方式进行访问

通过工具用 POST 方式访问 http://localhost:5000/info,可以看到类似下面的结果

可以看到我们的 API 都已经正常工作了~~

More

上面的示例代码可以在 Github 上获取 https://github.com/WeihanLi/SamplesInPractice/tree/master/net6sample/MininalAPI

编译需要安装 .NET 6  preview 5 环境

目前 .NET 6 Preview 还是有一些问题的,还不太建议大家实际项目进行升级,当然自己想尝试是可以的

如果使用遇到了什么问题,也可以通过 Github 上的 issue 向微软反馈 https://github.com/dotnet/core/issues/6389

References

  • https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-preview-4/

  • https://github.com/WeihanLi/SamplesInPractice/tree/master/net6sample/MininalAPI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Form身份验证

网站安全模式 使用Windows身份验证 使用Forms身份验证 使用最多,也是最常见的方式 使用PassPort身份验证(收费) 需要MS给接口 Forms身份验证 Web.config <system.web> <authentication mode"Forms"> <forms loginUrl"登陆地址.aspx&…

支付宝今日起还卡收费;大城市女性买房猛增;小米发布100W快充技术;严查非法办学行为;交大通报博导辱骂学生;这就是今天的大新闻...

今天是3月26日农历二月二十今天星期二不是个让人可以昏昏欲睡的日子下面是今天的大新闻支付宝还信用卡开始收费&#xff08;澎湃新闻&#xff09;根据支付宝此前发布的消息&#xff0c;自3月26日起&#xff0c;通过支付宝给信用卡还款超过免费额度后将收取0.1%的服务费&#xf…

mysql connector c编程_MySQL数据库之MySQL Connector 编程

本文主要向大家介绍了MySQL数据库之MySQL Connector 编程 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。MySQL Connector 是MySQL数据库客户端编程的接口, 它提供了通过网络访问数据库的接口, 这些功能在动态链接库(.dll, .so)或者静态…

WPF任务栏同步进度

一、概要本篇文章主要分享使用TaskbarItemInfo对象&#xff08;WPF&#xff09;在window操作系统的任务栏中同步任务进度的功能。什么是TaskbarItemInfo对象&#xff1f;TaskbarItemInfo类为 Windows 7 任务栏功能提供托管包装。有关 Windows shell 和本机任务栏 Api 的详细信息…

每日一笑 | 各大互联网公司离职员工群名

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

优秀的培训机构该如何培养学生?

作为一个优秀的培训机构来讲&#xff0c;培训的关键是提升学生的学习思想、养成良好学习习惯&#xff0c;培养学生较强的自学能力&#xff0c;否则讲再多的知识都还是少&#xff01; 老男孩培训多年来正是在履行着这样的教学理念和思路。 动物园的动物&#xff0c;如果不…

mysql快照过久_Oracle 快照(snapshot) 管理

----手工创建Oracle 快照 BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT (); END; / ---删除快照 具体快照信息可以查看视图 D----手工创建Oracle 快照BEGINDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();END;/---删除快照具体快照信息可以查看视图 DBA_HIST_SNAPSHOTBEGIND…

WPF 左侧菜单样式

之前做了一个菜单样式&#xff0c;这样的&#xff1a;链接&#xff1a;WPF 修改(优化)Menu菜单的样式如今又来一个左侧菜单样式&#xff0c;其实只是修改了一下模板&#xff0c;如下图&#xff1a;还是老样子&#xff0c;代码全部都在MainWindow.xaml中&#xff1a;<Window …

STEAM教育风口正劲,如何培养STEAM思维?

近年来&#xff0c;STEAM教育越来越深入我们的生活&#xff0c;但STEAM教育到底是什么呢&#xff1f;来源于美国的“STEAM教育”是将五大学科——科学&#xff08;Science&#xff09;、技术&#xff08;Technology&#xff09;、工程&#xff08;Engineering&#xff09;、艺术…

【Android开发】Android应用程序目录结构

原文&#xff1a;http://android.eoe.cn/topic/summary Android开发之旅&#xff1a;组件生命周期吴秦 Android开发之旅&#xff1a;HelloWorld项目的目录结构 * HelloWorld项目的目录结构* &#xff08;这个HelloWorld项目是基于Android 2.1的&#xff09;在Eclipse的左侧展开…

vue从url中获取token并加入到 请求头里_BATJ都会用到的接口鉴权cookie、session 和token...

鉴权鉴权是指验证用户是否拥有访问系统的权利—鉴定权限。cookie、session和token为什么会有cookie、session和token&#xff1f;1、 http是无状态协议什么是无状态呢&#xff1f;答&#xff1a;当前请求和上一次或者下一次请求是没有任何关系的&#xff0c;好处是速度快&#…

程序有并发错误?NO WAY!

什么是并发错误并发是指程序能够交替执行不同的任务,以达到"同时执行效果"&#xff0c;加快程序的运行效率。但是并发也会导致一系列问题&#xff0c;以变量1赋值为例&#xff0c;由于操作实际由多条指令组成&#xff0c;不同任务执行指令的顺序可能是交错的&#xf…

好好珍惜今生,不要期待来世……

亲情经不起冷漠&#xff0c;爱情经不起谎言&#xff0c;友情经不起虚伪。再好的缘份也经不起敷衍&#xff0c;再深的感情也需要珍惜。没有绝对的傻瓜&#xff0c;只有愿为你装傻的人&#xff0c;原谅你的人&#xff0c;是不愿失去你的世界。一辈子真的好短好短…… 有多少人说好…

NET问答: C# 中是否有 format json 的类库?

咨询区 mpen&#xff1a;我在寻找一个 function&#xff0c;它能够接收 string 格式的json&#xff0c;并且能够以 换行缩进 的形式输出&#xff0c;比如&#xff1a;{"status":"OK", "results":[ {"types":[ "locality", &…

图像柔光效果(SoftGlow)的原理及其实现。

图像柔光效果在很多商业软件中都有实现&#xff0c;比如美图秀秀&#xff0c;光影魔术手等。其能针对原始图像产生一副新的比较平滑感觉光线比较柔和的效果&#xff0c;给人一种朦胧美&#xff0c;如下面几幅图所示&#xff1a; 目前&#xff0c;关于该算法的可控参数&#xff…

中小学招生强化就近入学;首次全女性太空行走取消;苹果付费新闻APP奔溃;NASA火星上发现鹅卵石;这就是今天的大新闻...

今天是3月27日农历二月廿一今天星期三有点闷已经开始用空调了下面是今天的大新闻中小学招生强化就近入学&#xff08;北京商报&#xff09;中小学秋季入学新生招生已经陆续开始&#xff0c;近日&#xff0c;教育部办公厅也紧随其后&#xff0c;印发了《关于做好2019年普通中小学…

python如何安装扩展库openpyxl和numpy_Python第三方库之openpyxl(2)

Python第三方库之openpyxl(2)简单的使用写一个工作簿>>> from openpyxl importWorkbook>>> from openpyxl.compat importrange>>> from openpyxl.utils importget_column_letter>>>>>> wb Workbook()>>>>>> de…

[翻译]在GC上加入DPAD

本文90%通过机器翻译&#xff0c;另外10%译者按照自己的理解进行翻译&#xff0c;和原文相比有所删减&#xff0c;可能与原文并不是一一对应&#xff0c;但是意思基本一致。译者水平有限&#xff0c;如果错漏欢迎批评指正译者Bing Translator、InCerry&#xff0c;另外感谢Hex、…

SQL 结合CASE WHEN 实现二维统计

在开发中往往要用到类似下面的二维统计&#xff1a; abtype15465type25454在SQL中使用CASE WHEN 语句可以很轻松的实现&#xff1a; SELECT SUM(CASE WHEN typetype1 THEN 1 ELSE 0 END) AS a ,SUM(CASE WHEN typetype2 THEN 1 ELSE 0 END) AS b FROM Table1 转载于:https://ww…

phpfind mysql怎么用_MySQL 的 find_in_set 函数使用方法

举个例子来说&#xff1a;有个文章表里面有个type字段&#xff0c;它存储的是文章类型&#xff0c;有 1头条、2推荐、3热点、4图文...1,12,13 等等 。现在有篇文章他既是 头条&#xff0c;又是热点&#xff0c;还是图文&#xff0c;type中以 1,3,4 的格式存储。那我们如何用sql…