小易说IT 小易说IT

Aspire + .NET10 WebAPI 模板代码示例

前置说明: 环境:Visual Studio 2026 + .NET 10 SDK 方案结构:AppHost(Aspire 编排宿主) + WebAPI 服务 依赖:Aspire 9.x(.NET10 配套稳定版本),原生服务发现、健康检查、日志、仪表盘开箱即用

1. 快速创建命令(CLI,可直接用)

# 创建Aspire AppHost(编排入口)
dotnet new aspire-apphost -n AspireDemo.AppHost

# 创建WebApi项目
dotnet new webapi -n AspireDemo.Api

# 把Api引用加入AppHost
cd AspireDemo.AppHost
dotnet add reference ../AspireDemo.Api

2. 目录结构

AspireDemo/
├─ AspireDemo.AppHost/        # Aspire编排项目(Program.cs核心)
│  ├─ AspireDemo.AppHost.csproj
│  └─ Program.cs
└─ AspireDemo.Api/            # .NET10 WebAPI
   ├─ AspireDemo.Api.csproj
   └─ Program.cs

3. AspireDemo.AppHost 代码

AspireDemo.AppHost.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <PackageReference Include="Aspire.Hosting" Version="9.0.0" />
</Project>

Program.cs(AppHost)

using Aspire.Hosting;

var builder = DistributedApplication.CreateBuilder(args);

// 添加WebAPI服务,命名api
var api = builder.AddProject<Projects.AspireDemo.Api>("api");

// 【可选示例】如需Redis,放开下面注释
// var redis = builder.AddRedis("redis");
// api.WithReference(redis); // api项目自动拿到连接字符串

// 【可选示例】PostgreSQL
// var pg = builder.AddPostgres("pg").AddDatabase("apidb");
// api.WithReference(pg);

builder.Build().Run();

运行这个项目,就会拉起 Aspire 仪表盘 + WebAPI,自动分配端口,支持服务发现。


4. AspireDemo.Api WebAPI 代码

AspireDemo.Api.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <!-- Aspire服务默认集成包,自动读取Aspire注入的配置、健康检查 -->
  <PackageReference Include="Aspire.Microsoft.AspNetCore" Version="9.0.0" />
  <!-- 如果用到Redis:<PackageReference Include="Aspire.StackExchange.Redis" Version="9.0.0" /> -->
  <!-- 如果用到Postgres:<PackageReference Include="Aspire.Npgsql" Version="9.0.0" /> -->
</Project>

Program.cs(WebAPI,极简起步模板)

var builder = WebApplication.CreateBuilder(args);

// ✅ Aspire自动注入:配置、日志、健康检查、OTel可观测性
builder.AddServiceDefaults();

// Add services to the container
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Aspire默认端点(健康检查、仪表盘链路)
app.MapDefaultEndpoints();

// Swagger
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

// 示例接口
app.MapGet("/api/hello", () =>
{
    return Results.Ok(new { Message = "Hello Aspire + .NET10 WebAPI", Time = DateTime.UtcNow });
})
.WithName("GetHello")
.WithOpenApi();

// 带参数示例
app.MapGet("/api/greet/{name}", (string name) =>
{
    return Results.Ok(new { Greet = $"Hi {name}", FromApi = true });
})
.WithOpenApi();

app.Run();

5. 运行 & 访问方式

  1. VS2026 设置启动项目:AspireDemo.AppHost

  2. F5 启动

  3. 自动打开 Aspire 仪表盘:一般 https://localhost:xxxx

    • 可以看到 api 服务状态、日志、Traces、Metrics

  4. WebAPI 地址在仪表盘里直接点开,Swagger:/swagger

  5. 健康检查地址:/health、/health/ready

6. 进阶扩展片段(常用,直接粘贴)

6.1 在 Api 中读取 Aspire 注入的 Redis 连接

// Program.cs
builder.AddRedisClient("redis");

然后注入 IConnectionMultiplexer 使用。

6.2 增加 EF Core + Postgres

// Api侧
builder.AddNpgsqlDbContext<AppDbContext>("apidb");
public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
{
    public DbSet<DemoEntity> Demos => Set<DemoEntity>();
}

6.3 服务之间调用(服务发现)

假设有第二个 API 叫 backend,在 AppHost 里:

var backend = builder.AddProject<Projects.AspireDemo.Backend>("backend");
api.WithReference(backend);

在 api 项目里直接 HttpClient 调用,不需要写硬编码地址:

builder.Services.AddHttpClient<IBackendClient, BackendClient>(c =>
{
    c.BaseAddress = new Uri("https://backend");
});

7. 重要踩坑提示

  1. 版本对齐:Aspire 9.0 配套 .NET10,不要混用 Aspire 8.x

  2. AddServiceDefaults() 是 Aspire 核心封装,包含 OTel、日志、健康检查,不要删掉

  3. 只启动 Api 项目本身,Aspire 编排能力不会生效;必须启动 AppHost

  4. SLNX 新方案格式完全支持这套结构,VS2026 原生识别