.net 6.0新特性 最小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应用程序。

.net 6.0新特性 最小Web API

但是,要在生产环境下使用的API不可能这么简单,至少需要处理依赖项和中间件。

Demo

1.使用模板

打开Visual Studio 2022,创建新项目,选择“ASP.NET Core Web API”项目模板:

.net 6.0新特性 最小Web API

可以看到Use controllers选项默认选中的,取消该选项,则会创建最小Web API。

2.代码结构

相较于VS2019生成的项目结构,文件精简了,而且代码量也少很多:

.net 6.0新特性 最小Web API

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是否工作正常:

.net 6.0新特性 最小Web API

结论

作为要在生产环境下使用的API,随着项目需求和复杂性的增加,单个文件会变得非常臃肿。

因此,将不同功能代码分解到不同的层和文件中肯定是必然的结果。

目前来说,最小Web API仅用于快速创建演示项目,而对生产项目使用自定义模板,可能是较好的选择。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论