前置说明: 环境: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. 运行 & 访问方式
VS2026 设置启动项目:AspireDemo.AppHost
F5 启动
自动打开 Aspire 仪表盘:一般
https://localhost:xxxx可以看到
api服务状态、日志、Traces、Metrics
WebAPI 地址在仪表盘里直接点开,Swagger:
/swagger健康检查地址:
/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. 重要踩坑提示
版本对齐:Aspire 9.0 配套 .NET10,不要混用 Aspire 8.x
AddServiceDefaults()是 Aspire 核心封装,包含 OTel、日志、健康检查,不要删掉只启动 Api 项目本身,Aspire 编排能力不会生效;必须启动 AppHost
SLNX 新方案格式完全支持这套结构,VS2026 原生识别