.NET Aspire中如何获取解析端点创建双向导航链接?
.NET Aspire 跨应用导航实现方案
前提配置确认
你代码里的.WithReference(login)是需要的,它会在本地开发阶段建立主应用与登录应用的依赖关系,确保启动顺序,同时为服务发现提供基础支持。另外,两个应用的Program.cs都需要添加服务发现配置:
// 主应用和登录应用的Program.cs中都要添加 builder.AddServiceDiscovery();
1. 主应用Razor页面创建登录应用的端点链接
在主应用的Razor页面中,通过注入IServiceDiscoveryProvider获取登录应用的端点,再生成跳转链接:
步骤1:页面后台代码(如Index.cshtml.cs)
using Microsoft.Extensions.ServiceDiscovery; public class IndexModel : PageModel { private readonly IServiceDiscoveryProvider _serviceDiscovery; public IndexModel(IServiceDiscoveryProvider serviceDiscovery) { _serviceDiscovery = serviceDiscovery; } public string? LoginAppUrl { get; set; } public async Task OnGet() { // 根据服务名(AppHost中AddProject指定的"login")获取端点 var loginEndpoints = await _serviceDiscovery.GetEndpointsAsync("login"); LoginAppUrl = loginEndpoints.FirstOrDefault()?.Uri.ToString(); } }
步骤2:Razor视图代码(如Index.cshtml)
@if (!string.IsNullOrEmpty(Model.LoginAppUrl)) { <a href="@Model.LoginAppUrl">前往登录页面</a> }
2. 实现双向导航链接
要让登录应用也能跳转回主应用,只需在登录应用中重复类似逻辑,通过服务发现获取主应用的端点即可:
步骤1:登录应用页面后台代码(如Login.cshtml.cs)
using Microsoft.Extensions.ServiceDiscovery; public class LoginModel : PageModel { private readonly IServiceDiscoveryProvider _serviceDiscovery; public LoginModel(IServiceDiscoveryProvider serviceDiscovery) { _serviceDiscovery = serviceDiscovery; } public string? MainAppUrl { get; set; } public async Task OnGet() { // 根据服务名(AppHost中AddProject指定的"main-app")获取端点 var mainAppEndpoints = await _serviceDiscovery.GetEndpointsAsync("main-app"); MainAppUrl = mainAppEndpoints.FirstOrDefault()?.Uri.ToString(); } }
步骤2:登录应用Razor视图代码(如Login.cshtml)
@if (!string.IsNullOrEmpty(Model.MainAppUrl)) { <a href="@Model.MainAppUrl">返回主应用</a> }
关键说明
服务发现的核心逻辑是:Aspire的AppHost会自动注册所有添加的服务,并将端点信息注入到每个服务的运行配置中。通过IServiceDiscoveryProvider,你可以直接通过服务名称(即AddProject时指定的第二个参数,比如"login"、"main-app")获取对应服务的可用端点,无需硬编码地址。
内容的提问来源于stack exchange,提问作者Jaider
相关产品推荐
相关产品推荐

