ASP.NET Core 中基于 Minimal APIs 的Web API

本文介绍了如何在ASP.NETCore中利用MinimalAPIs快速创建RESTfulAPI,通过示例展示了如何映射HTTP请求和使用InMemoryDatabase实现基本CRUD操作,适合构建微服务和轻量级网站。

基于 Minimal APIs 的Web API

Minimal APIs 是ASP.NET Core中快速构建 REST API 的方式,可以用最少的代码构建全功能的REST API。比如下面三行代码:

var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run();

可以实现在请求网站根目录结点的时候,返回"Hello World!"。
这种方式的Web API可以用于构建微服务,极简功能的网站。

映射 HTTP 请求

下面代码,将几个 HTTP 请求的 url映射到 Lambda 函数中,分别是:

  • HTTP GET,/todoitems ,获取所有todoitems
  • HTTP GET,/todoitems/complete,获取所有完成的todoitems
  • HTTP GET,/todoitems/{id},获取某个 id 的todoitem
  • HTTP Post,/todoitems,添加一个todoitem
  • HTTP PUT,/todoitems/{id},修改某个 id 的todoitem
  • HTTP DELETE,/todoitems/{id},删除某个 id 的todoitem
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<TodoDb>(opt => opt.UseInMemoryDatabase("TodoList"));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
var app = builder.Build();

app.MapGet("/todoitems", async (TodoDb db) =>
    await db.Todos.ToListAsync());

app.MapGet("/todoitems/complete", async (TodoDb db) =>
    await db.Todos.Where(t => t.IsComplete).ToListAsync());

app.MapGet("/todoitems/{id}", async (int id, TodoDb db) =>
    await db.Todos.FindAsync(id)
        is Todo todo
            ? Results.Ok(todo)
            : Results.NotFound());

app.MapPost("/todoitems", async (Todo todo, TodoDb db) =>
{
    db.Todos.Add(todo);
    await db.SaveChangesAsync();

    return Results.Created($"/todoitems/{todo.Id}", todo);
});

app.MapPut("/todoitems/{id}", async (int id, Todo inputTodo, TodoDb db) =>
{
    var todo = await db.Todos.FindAsync(id);

    if (todo is null) return Results.NotFound();

    todo.Name = inputTodo.Name;
    todo.IsComplete = inputTodo.IsComplete;

    await db.SaveChangesAsync();

    return Results.NoContent();
});

app.MapDelete("/todoitems/{id}", async (int id, TodoDb db) =>
{
    if (await db.Todos.FindAsync(id) is Todo todo)
    {
        db.Todos.Remove(todo);
        await db.SaveChangesAsync();
        return Results.NoContent();
    }

    return Results.NotFound();
});

app.Run();
.NET 9 中构建轻量级 Web API 的方案可以基于 ASP.NET Core 提供的 Minimal APIs 模型。Minimal APIs 是一种简化的方式,用于创建无需复杂结构的小型 HTTP 服务[^5]。这种方式特别适合快速开发和部署微服务或小型 API 驱动的应用程序。 ### 使用 Minimal APIs 创建轻量级 Web API Minimal APIs 允许开发者以更简洁的方式定义端点,而无需传统的控制器类。以下是一个简单的示例代码: ```csharp var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/hello", () => "Hello from .NET 9!"); app.Run(); ``` 上述代码创建了一个基本的 Web 应用程序,并定义了一个 GET 端点 `/hello`,返回一个简单的字符串响应。这个例子展示了如何使用最少的代码来启动一个 Web API 服务。 ### 自定义配置与依赖注入 尽管 Minimal APIs 强调轻量级,但它仍然支持依赖注入和其他高级功能。例如,可以通过 `Program.cs` 文件中的 `AddSingleton`, `AddScoped` 或 `AddTransient` 方法注册服务: ```csharp builder.Services.AddSingleton<ITodoRepository, TodoRepository>(); ``` 然后可以在路由处理函数中通过参数注入这些服务: ```csharp app.MapGet("/todos", (ITodoRepository repo) => repo.GetAll()); ``` ### 使用 OpenAPI 和 Swagger UI 为了更好地文档化 API 并提供交互式界面,可以集成 Swagger UI。这需要添加 Swashbuckle.AspNetCore 包,并在项目中启用它: ```csharp builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } // Define your endpoints here... app.Run(); ``` 这样就可以在开发环境中访问 Swagger UI,查看并测试你的 API。 ### 性能优化与中间件 ASP.NET Core 提供了多种中间件来增强应用程序的功能,如身份验证、日志记录、静态文件处理等。对于轻量级 Web API 来说,合理选择和配置中间件可以帮助提高性能和安全性。例如,启用缓存可以减少重复请求对后端的压力: ```csharp app.UseResponseCaching(); app.Use(async (context, next) => { context.Response.GetTypedHeaders().CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue() { Public = true, MaxAge = TimeSpan.FromSeconds(10) }; await next(context); }); ``` ### 容器化与部署 考虑到现代云原生环境的需求,.NET 9 应用程序非常适合容器化部署。Dockerfile 可以非常简单地构建镜像: ```dockerfile FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build-env WORKDIR /app COPY *.csproj ./ RUN dotnet restore COPY . ./ RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/aspnet:9.0 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "YourApp.dll"] ``` 以上 Dockerfile 示例展示了如何从源代码构建并发布到生产环境的 ASP.NET Core 应用程序。 ### 结论 综上所述,.NET 9 提供了强大的工具和支持来构建轻量级 Web API,无论是通过 Minimal APIs 的简洁性、丰富的中间件生态、还是易于容器化的特性,都能满足不同场景下的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值