You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:22:49