使用 .NET 6 的精简 API 开始使用

2025-06-08

使用 .NET 6 的精简 API 开始使用

TLDR;使用最少的 API,您可以利用顶级语句等新功能,仅用 4 行代码创建 Web API。

 为什么要使用最小 API

想要用几行代码创建 API 的原因有很多:

  • 创建原型。有时你想要快速得到结果,一个原型,一个可以与同事讨论的东西。快速启动并运行某个东西,可以让你快速地对其进行修改,直到得到你想要的结果。
  • 渐进式增强。您可能一开始并不需要所有“花哨”的功能,但随着时间的推移,您可能会需要它们。精简的 API 让您可以轻松地在需要时逐步添加所需的功能。

 了解更多

查看这些关于学习使用最少 API 的学习模块

它与普通的 Web API 有何不同?

有一些区别:

  • 文件更少。Startup.cs不再存在,只剩Program.cs
  • 顶级语句和隐式全局使用。因为它使用了顶级语句,using并且namespace也消失了,所以这段代码:
   using System;
   namespace Application
   {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
            }
        }
   }
Enter fullscreen mode Exit fullscreen mode

现在是这个代码:

   Console.WriteLine("Hello World!");
Enter fullscreen mode Exit fullscreen mode
  • 路线您的路线不会映射到控制器类,而是使用Map[VERB]函数进行设置,就像您上面看到的那样,MapGet()它采用路线和在命中该路线时要调用的函数。

 您的第一个 API

要开始使用最小 API,您需要确保已安装 .NET 6,然后您可以通过命令行搭建 API,如下所示:

dotnet new web -o MyApi -f net6.0
Enter fullscreen mode Exit fullscreen mode

一旦运行该程序,您将获得一个包含您的 API 的文件夹MyApi 。

您将在Program.cs中获得以下代码

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

app.MapGet("/", () => "Hello World!");

app.Run();
Enter fullscreen mode Exit fullscreen mode

要运行它,请输入dotnet run。此处端口略有不同,它会默认使用一定范围内的随机端口,而不是您可能习惯的 5000/5001。不过,您可以根据需要配置端口。更多信息,请参阅此文档页面

 解释各部分

好的,那么您有一个最小 API,代码是怎样的?

 创建一个构建器

var builder = WebApplication.CreateBuilder(args);
Enter fullscreen mode Exit fullscreen mode

在第一行,你创建一个builder实例。它builder有一个Services属性,因此你可以在其上添加功能,例如 Swagger Cors、Entity Framework 等等。以下是一个设置 Swagger 功能的示例(不过需要安装 Swashbuckle NuGet 才能运行):

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Todo API", Description = "Keep track of your tasks", Version = "v1" });
    });
Enter fullscreen mode Exit fullscreen mode

创建应用程序实例

下一行如下:

var app = builder.Build();
Enter fullscreen mode Exit fullscreen mode

这里我们创建了一个app实例。通过该app实例,我们可以执行以下操作:

  • 启动应用程序,app.Run()
  • 配置路线,app.MapGet()
  • 配置中间件,app.UseSwagger()

定义路线

使用以下代码配置路由和路由处理程序:

app.MapGet("/", () => "Hello World!");
Enter fullscreen mode Exit fullscreen mode

该方法MapGet()设置一条新路线,并将路线“/”和路线处理程序(一个函数)作为第二个参数() => "Hello World!"

启动应用程序

要启动应用程序并让其处理请求,您要做的最后一件事就是像这样调用实例Run()app

app.Run();
Enter fullscreen mode Exit fullscreen mode

 添加路线

要添加额外的路线,我们可以这样输入:

public record Pizza(int Id, string Name); 
app.MapGet("/pizza", () => new Pizza(1, "Margherita"));
Enter fullscreen mode Exit fullscreen mode

现在您的代码如下所示:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

app.MapGet("/pizza", () => new Pizza(1, "Margherita"));
app.MapGet("/", () => "Hello World!");

public record Pizza(int Id, string Name); 

app.Run();


Enter fullscreen mode Exit fullscreen mode

运行此代码并dotnet run导航到/pizza您将获得 JSON 响应的位置:

{
  "pizza" : {
    "id" : 1,
    "name" : "Margherita"
  }
}
Enter fullscreen mode Exit fullscreen mode

示例应用程序

让我们把迄今为止学到的所有知识应用到一个支持 GET 和 POST 的应用程序中,并且还可以轻松展示如何使用查询参数:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

var pizzas = new List<Pizza>(){
   new Pizza(1, "Margherita"),
   new Pizza(2, "Al Tonno"),
   new Pizza(3, "Pineapple"),
   new Pizza(4, "Meat meat meat")
};

app.MapGet("/", () => "Hello World!");
app.MapGet("/pizzas/{id}", (int id) => pizzas.SingleOrDefault(pizzas => pizzas.Id == id));
app.MapGet("/pizzas", (int ? page, int ? pageSize) => {
    if(page.HasValue && pageSize.HasValue) 
    {
        return pizzas.Skip((page.Value -1) * pageSize.Value).Take(pageSize.Value);
    } else {
        return pizzas;
    }
});
app.MapPost("/pizza", (Pizza pizza) => pizzas.Add(pizza));

app.Run();

public record Pizza(int Id, string Name);

Enter fullscreen mode Exit fullscreen mode

使用以下命令运行此应用程序dotnet run

在您的浏览器中,尝试各种操作,例如:

 了解更多

查看这些关于学习使用最少 API 的学习模块

鏂囩珷鏉ユ簮锛�https://dev.to/dotnet/get-started-with-minimal-api-1il7
PREV
如何在 .NET Core 和 C# 中使用 ORM 来减少 SQL 语句 - Entity Framework
NEXT
使用 ASP.NET Core 6 立即构建 Web API