.NET Aspire Dashboard:动态修改带查询参数的服务URL及重启更新方案问询
.NET Aspire 仪表盘自定义认证URL方案
问题1:替换默认服务URL并禁用默认端点
你提到的WithHttpsEndpoint(Uri)方法确实不存在,不过可以通过禁用默认端点自动检测+自定义端点上报的方式实现需求:
步骤1:在AppHost中禁用默认端点
在你的Aspire AppHost项目的Program.cs里,配置Web服务时关闭默认HTTP/HTTPS端点的自动注册,避免仪表盘显示原始URL:
var builder = DistributedApplication.CreateBuilder(args); var webApp = builder.AddProject<Projects.YourWebApp>("auth-web") // 禁用默认HTTP端点 .WithHttpEndpoint(endpoint => endpoint.Disable()) // 禁用默认HTTPS端点 .WithHttpsEndpoint(endpoint => endpoint.Disable()); builder.Build().Run();
步骤2:在Web应用中生成并上报认证URL
在Web应用的Program.cs里,生成随机token后,通过Aspire的IResourcePublisher将完整认证URL上报给仪表盘:
- 先添加依赖包:在Web应用的项目文件中引入
Aspire.Hosting.Abstractions
<PackageReference Include="Aspire.Hosting.Abstractions" Version="9.0.0" />
- 编写代码生成URL并上报:
var builder = WebApplication.CreateBuilder(args); // 生成随机认证token var authToken = Guid.NewGuid().ToString("N"); // 基于Aspire注入的基础服务URL拼接完整认证地址 var baseUri = builder.Configuration["Aspire:ServiceUri"]; var authUrl = new Uri($"{baseUri}/login?t={authToken}"); // 注册后台服务,启动时上报自定义端点 builder.Services.AddHostedService(sp => new AuthEndpointPublisher(sp, authUrl)); var app = builder.Build(); // 你的Web应用中间件配置... app.Run(); // 自定义端点上报服务 public class AuthEndpointPublisher : IHostedService { private readonly IResourcePublisher _publisher; private readonly Uri _authUrl; public AuthEndpointPublisher(IServiceProvider sp, Uri authUrl) { _publisher = sp.GetRequiredService<IResourcePublisher>(); _authUrl = authUrl; } public async Task StartAsync(CancellationToken cancellationToken) { // 向Aspire仪表盘发布自定义HTTPS端点,标记为web类型(会在仪表盘显示为可点击的链接) await _publisher.PublishEndpointAsync( new Endpoint("auth-login", _authUrl, EndpointProtocol.Https, "web"), cancellationToken); } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; }
这样仪表盘就只会显示你生成的带token的认证URL,默认端点被完全禁用。
问题2:重启服务时自动更新URL
上面的方案天然支持重启更新:每次点击仪表盘的"Restart Service"按钮,Web应用会重新启动,重新生成随机token并拼接新的认证URL,然后通过IResourcePublisher上报新的端点信息。Aspire仪表盘会实时接收并更新展示的URL,无需额外配置。
内容的提问来源于stack exchange,提问作者ovasylenko




