前言

如果你使用过其他一些轻量级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相关推荐

  1. .NET 6新特性试用 | 总结:我最喜欢的5个特性

    前言 不知不觉,<.NET 6新特性试用>系列文章已经写了20多篇,而今天终于要告一段落了. 如果你还没有看过,详细文章列表在这里: .NET 6新特性试用系列 在这么多特性中,我最喜欢如 ...

  2. 想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)

    前言 上回,我们使用最小 WEB API 实现文件上传功能(<想说爱你不容易 | 使用最小 WEB API 实现文件上传>),虽然客户端访问是正常的,但是当打开 Swagger 页面时,发 ...

  3. 想说爱你不容易 | 使用最小 WEB API 实现文件上传

    前言 在 .NET 6 之前,实现文件上传功能十分简单: [HttpPost("upload")] public async Task<IActionResult> U ...

  4. .NET 6新特性试用 | 无需配置开发人员异常页

    前言 在.NET 6之前,我们需要在"Startup.cs"文件中手工配置开发人员异常页: if (env.IsDevelopment()) {app.UseDeveloperEx ...

  5. .NET 6新特性试用 | 隐式using指令

    前言 在使用<最小Web API>时,我们发现,相比以前的代码,大量的using指令消失了: using指令的主要作用是允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间. ...

  6. Java8新特性【函数式编程API、新时间日期处理API、Optional容器类】总结

    文章目录 1.Lambda表达式 1.1什么是Lambda表达式 1.2从匿名类到 Lambda 的转换 1.3Lambda表达式语法 2.函数式接口 2.1什么是函数式接口 2.2自定义函数式接口 ...

  7. Java8新特性总结 -5.Stream API函数式操作流元素集合

    所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...

  8. .NET 6新特性试用 | Controller支持IAsyncDisposable

    前言 在.NET中,拥有非托管资源的类通常会实现IDisposable接口,以提供一种同步释放非托管资源的机制. 但是,在某些情况下,需要提供一种异步机制来释放非托管资源,这时候可以实现IAsyncD ...

  9. .NET 6新特性试用 | 可空引用类型

    前言 在查看<隐式using指令>功能时,我们在csproj中发现这样一个属性: 那么,Nullable到底是干嘛的? 可为空上下文 严格来说,这不是新特性,而是C# 8.0引入的特性之一 ...

最新文章

  1. android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating
  2. 有效用例模式阅读笔记三
  3. HDU 5226 Tom and matrix(组合数学+Lucas定理)
  4. 你可能不知道的package.json
  5. 读书印记 - 《创新者的解答》
  6. Hibernate(二)——一对多查询
  7. 字符集ASCII、GBK、UNICODE、UTF在储存字符时的区别
  8. 李洪强iOS之集成极光推送二iOS 证书 设置指南
  9. 编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序。
  10. 2021综述:计算机视觉中的注意力机制(续二):空间注意力
  11. adblock插件_为WordPress创建一个反AdBlock插件
  12. pm9screw php,PHP使用Screw把源代码加密
  13. autojs 绝美ui模板5
  14. CleanMyMac2022免费版MAC内存清理空间软件
  15. UE4流关卡与无缝地图切换总结
  16. html怎么设置视频不能快进,【浏览器插件】Video Speed Controller – 网页视频倍速、快进、回放功能0.07~16 倍...
  17. 一个APP的开发流程
  18. Python 格式化输出时间(包含毫秒)
  19. Ubuntu 命令行安装Anaconda3(root用户)
  20. 5G取代光纤宽带,有可能吗?

热门文章

  1. 一个古怪的VISTA网络问题解决的坎坷经历
  2. lr中winsock协议的脚本(转载51testing)
  3. 通过修改注册表设定浏览器的却省值
  4. MSSqlServer基础学习01
  5. MapReduce详解和WordCount模拟
  6. thinkpaidE480office安装文件夹
  7. java数组转list(Arrays .asList)
  8. sublime快捷键收藏
  9. Cachefiled
  10. IT行业 侃侃富士康