.NET 6新特性试用 | 最小Web API

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.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新特性试用 可写JSON DOM API

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

.NET 6新特性试用 | 可写JSON DOM API

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

如何更好地组织最小 WEB API 代码结构

.NET 6新特性试用 | PeriodicTimer