Aspire Dashboard 打不开页面通常因后台服务未启动、端口被占或容器未就绪;资源列表无服务是因未在 AspireAppHost 中显式注册;日志和拓扑依赖结构化日志与正确服务引用;metrics 404 需启用 Prometheus endpoint。

Aspire Dashboard 启动后打不开页面怎么办
默认启动 dotnet aspire dashboard 后,浏览器访问 http://localhost:18080 却显示连接被拒绝或空白页,大概率是后台服务没起来或端口被占。先确认 Aspire host 进程是否在运行:dotnet --list-processes 或任务管理器查 Microsoft.Extensions.Hosting 相关进程。
常见原因和应对方式:
- 项目未启用 Aspire 托管模型:确保启动项目是
AspireApp.Host(或含AddAspireDashboard()的宿主),不是直接跑 Web API 项目 - 端口冲突:用
netstat -ano | findstr :18080查占用进程,或改用dotnet aspire dashboard --port 18081 - Dashboard 依赖的 Redis / PostgreSQL 容器未就绪:检查终端输出是否有
Waiting for container 'redis' to be ready...类提示,等待几秒再刷新 - 首次启动需拉取镜像:Docker Desktop 必须运行且有网络,
docker ps应能看到aspire-dashboard-db等容器
为什么资源列表里看不到我的服务
Aspire Dashboard 不会自动发现所有项目,只监控通过 AddProject 或 AddExecutable(...) 显式注册到 AspireAppHost 的组件。如果你的服务是独立部署的(比如手动 dotnet run),它不会出现在仪表板中。
正确做法是在 Program.cs 的宿主构建阶段注册:
var builder = DistributedApplication.CreateBuilder(args); builder.AddProject("myapi"); // ← 必须这样注册 builder.AddProject ("frontend"); builder.Build().Run();
注意点:
- 项目名(如
"myapi")会作为服务标识显示在 Dashboard 左侧资源列表,不能重复 - 若服务启动慢(如 EF Core 迁移耗时),Dashboard 可能短暂显示 “Not Ready”,等其健康检查通过(HTTP 200 或
/healthendpoint)才会变绿 - 确保服务暴露了可被 Dashboard 探测的 endpoint:默认要求
http://localhost:50xx/health返回 200,否则需在注册时指定健康检查路径:.WithHealthCheck("/api/health")
如何查看服务的实时日志和依赖拓扑
Dashboard 页面左上角切换到 Logs 标签页,选中某服务后,日志流会自动按时间倒序加载。它不是简单转发 Console.WriteLine,而是依赖 Microsoft.Extensions.Logging 的结构化日志管道 —— 所以你的服务必须使用 ILogger 记录,且宿主已启用日志聚合(默认开启)。
拓扑图(Topology 标签页)展示服务间调用关系,但前提是调用走的是 Aspire 内置的可观测性链路:
- HTTP 调用需用
HttpClient实例(由builder.AddProject().WithReference(...)注入),而非硬编码 URL - gRPC 调用需用
AddGrpcServiceReference注册,Dashboard 才能解析服务发现地址并绘制箭头 - 数据库连接不会自动出现在拓扑中 —— 即使你用了
AddRedis或AddPostgres,它们只显示为独立资源节点,不体现“谁连了它”
Dashboard 报错 “Failed to load metrics: 404” 怎么办
这个错误说明服务没暴露 Prometheus metrics endpoint,或者路径不对。Aspire 默认期望服务在 /metrics 提供 OpenMetrics 格式数据(如 http://localhost:5091/metrics)。
修复步骤:
- 在服务项目中安装
Prometheus.AspNetCore包 - 在
Program.cs添加:builder.Services.AddEndpointsApiExplorer(); builder.Services.AddPrometheusHttpMetrics(); app.MapPrometheusScrapingEndpoint(); - 确保服务启动后,手动 curl
curl http://localhost:5091/metrics能返回文本指标(含# TYPE process_cpu_seconds_total counter等) - Dashboard 默认每 15 秒拉一次指标;如果服务刚启动,可能要等一两个周期才显示图表
注意:指标采集依赖服务的 ASPNETCORE_ENVIRONMENT 是 Development 或明确启用了 app.UsePrometheusHttpMetrics() 中间件 —— 生产环境常会关闭此 endpoint。










