| File: Configuration\EndpointInfo.cs | Web Access |
| Project: src\src\Aspire.Dashboard\Aspire.Dashboard.csproj (Aspire.Dashboard) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Dashboard.Authentication.Connection; using Microsoft.AspNetCore.Server.Kestrel.Core; namespace Aspire.Dashboard.Configuration; public record EndpointInfo(string Name, BindingAddress Address, HttpProtocols? HttpProtocols, bool RequireCertificate, ConnectionType ConnectionType) { public static bool TryAddEndpoint(List<EndpointInfo> configuredEndpoints, BindingAddress? address, string name, HttpProtocols? httpProtocols, bool requireCertificate, ConnectionType connectionType) { if (address != null) { configuredEndpoints.Add(new EndpointInfo(name, address, httpProtocols, requireCertificate, connectionType)); return true; } return false; } public static IEnumerable<KeyValuePair<BindingAddress, List<EndpointInfo>>> GroupEndpointsByAddress(IEnumerable<EndpointInfo> endpoints) { var groups = new List<KeyValuePair<BindingAddress, List<EndpointInfo>>>(); var map = new Dictionary<string, List<EndpointInfo>>(); foreach (var endpoint in endpoints) { var address = endpoint.Address; if (address.Port == 0) { // Port 0 — each endpoint is its own group groups.Add(new KeyValuePair<BindingAddress, List<EndpointInfo>>(address, [endpoint])); } else { var key = address.ToString(); if (!map.TryGetValue(key, out var list)) { list = []; map[key] = list; } list.Add(endpoint); } } // Add all normal (non-zero-port) grouped endpoints foreach (var kvp in map) { var address = kvp.Value.First().Address; groups.Add(new KeyValuePair<BindingAddress, List<EndpointInfo>>(address, kvp.Value)); } return groups; } }