.NET 6新特性试用 | 最小Web API
前言
如果你使用过其他一些轻量级Web框架,比如Node.JS,你就会知道,创建具有最小依赖项的HTTP API是多么简单:
var express = require('express')
var app = express()app.get('/', function (req, res) {res.send('hello My IO!')
})app.listen(3000)
而现在,使用.NET 6,我们也可以在ASP.NET Core中创建仅包括最少文件、功能和依赖项的最小Web API。
最小Web API
要实现上面相同的功能,只需要三行代码:
var app = WebApplication.Create(args);app.MapGet("/", () => "hello My IO!");app.Run();
首先,创建一个WebApplication实例;
然后,使用
MapGet
方法配置了一个最小Web API端点;最后,使用
Run
方法启动Web API应用程序。
但是,要在生产环境下使用的API不可能这么简单,至少需要处理依赖项和中间件。
Demo
1.使用模板
打开Visual Studio 2022,创建新项目,选择“ASP.NET Core Web API”项目模板:
可以看到Use controllers
选项默认选中的,取消该选项,则会创建最小Web API。
2.代码结构
相较于VS2019生成的项目结构,文件精简了,而且代码量也少很多:
var builder = WebApplication.CreateBuilder(args);// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();var app = builder.Build();// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI();
}app.UseHttpsRedirection();var summaries = new[]
{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};app.MapGet("/weatherforecast", () =>
{var forecast = Enumerable.Range(1, 5).Select(index =>new WeatherForecast(DateTime.Now.AddDays(index),Random.Shared.Next(-20, 55),summaries[Random.Shared.Next(summaries.Length)])).ToArray();return forecast;
})
.WithName("GetWeatherForecast");app.Run();internal record WeatherForecast(DateTime Date, int TemperatureC, string? Summary)
{public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
相较于以前我们使用两个单独的文件Program.cs和Startup.cs来配置应用程序托管和启动。现在,全部都在Program.cs中实现:
在WebApplicationBuilder实例上使用
Addxxx
方法向DI容器注册特定服务,类似Startup类的ConfigureServices方法实现。在WebApplication实例上使用
Usexxx
方法将一系列中间件加入到HTTP管道,类似Startup类的Configure方法实现。
DTO使用
record
定义,而且也放在同一个Program.cs文件中。
3.功能演示
现在我们运行应用程序,Visual Studio 2022默认使用 Kestrel Web服务器,而不是IIS Express。
最小Web API默认已经集成了Swagger,我们可以直接在这里验证API是否工作正常:
结论
作为要在生产环境下使用的API,随着项目需求和复杂性的增加,单个文件会变得非常臃肿。
因此,将不同功能代码分解到不同的层和文件中肯定是必然的结果。
目前来说,最小Web API仅用于快速创建演示项目,而对生产项目使用自定义模板,可能是较好的选择。
.NET 6新特性试用 | 最小Web API相关推荐
- .NET 6新特性试用 | 总结:我最喜欢的5个特性
前言 不知不觉,<.NET 6新特性试用>系列文章已经写了20多篇,而今天终于要告一段落了. 如果你还没有看过,详细文章列表在这里: .NET 6新特性试用系列 在这么多特性中,我最喜欢如 ...
- 想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)
前言 上回,我们使用最小 WEB API 实现文件上传功能(<想说爱你不容易 | 使用最小 WEB API 实现文件上传>),虽然客户端访问是正常的,但是当打开 Swagger 页面时,发 ...
- 想说爱你不容易 | 使用最小 WEB API 实现文件上传
前言 在 .NET 6 之前,实现文件上传功能十分简单: [HttpPost("upload")] public async Task<IActionResult> U ...
- .NET 6新特性试用 | 无需配置开发人员异常页
前言 在.NET 6之前,我们需要在"Startup.cs"文件中手工配置开发人员异常页: if (env.IsDevelopment()) {app.UseDeveloperEx ...
- .NET 6新特性试用 | 隐式using指令
前言 在使用<最小Web API>时,我们发现,相比以前的代码,大量的using指令消失了: using指令的主要作用是允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间. ...
- Java8新特性【函数式编程API、新时间日期处理API、Optional容器类】总结
文章目录 1.Lambda表达式 1.1什么是Lambda表达式 1.2从匿名类到 Lambda 的转换 1.3Lambda表达式语法 2.函数式接口 2.1什么是函数式接口 2.2自定义函数式接口 ...
- Java8新特性总结 -5.Stream API函数式操作流元素集合
所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...
- .NET 6新特性试用 | Controller支持IAsyncDisposable
前言 在.NET中,拥有非托管资源的类通常会实现IDisposable接口,以提供一种同步释放非托管资源的机制. 但是,在某些情况下,需要提供一种异步机制来释放非托管资源,这时候可以实现IAsyncD ...
- .NET 6新特性试用 | 可空引用类型
前言 在查看<隐式using指令>功能时,我们在csproj中发现这样一个属性: 那么,Nullable到底是干嘛的? 可为空上下文 严格来说,这不是新特性,而是C# 8.0引入的特性之一 ...
最新文章
- android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating
- 有效用例模式阅读笔记三
- HDU 5226 Tom and matrix(组合数学+Lucas定理)
- 你可能不知道的package.json
- 读书印记 - 《创新者的解答》
- Hibernate(二)——一对多查询
- 字符集ASCII、GBK、UNICODE、UTF在储存字符时的区别
- 李洪强iOS之集成极光推送二iOS 证书 设置指南
- 编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序。
- 2021综述:计算机视觉中的注意力机制(续二):空间注意力
- adblock插件_为WordPress创建一个反AdBlock插件
- pm9screw php,PHP使用Screw把源代码加密
- autojs 绝美ui模板5
- CleanMyMac2022免费版MAC内存清理空间软件
- UE4流关卡与无缝地图切换总结
- html怎么设置视频不能快进,【浏览器插件】Video Speed Controller – 网页视频倍速、快进、回放功能0.07~16 倍...
- 一个APP的开发流程
- Python 格式化输出时间(包含毫秒)
- Ubuntu 命令行安装Anaconda3(root用户)
- 5G取代光纤宽带,有可能吗?