// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Hosting.Server.Features; namespace Microsoft.AspNetCore.Hosting { public static class IWebHostPortExtensions { public static string GetHost(this IWebHost host, bool isHttps = false) { return host.GetUri(isHttps).Host; } public static int GetPort(this IWebHost host) { return host.GetPorts().First(); } public static int GetPort(this IWebHost host, string scheme) { return host.GetUris() .Where(u => u.Scheme.Equals(scheme, StringComparison.OrdinalIgnoreCase)) .Select(u => u.Port) .First(); } public static IEnumerable GetPorts(this IWebHost host) { return host.GetUris() .Select(u => u.Port); } public static IEnumerable GetUris(this IWebHost host) { return host.ServerFeatures.Get().Addresses .Select(a => new Uri(a)); } public static Uri GetUri(this IWebHost host, bool isHttps = false) { var uri = host.GetUris().First(); if (isHttps && uri.Scheme == "http") { var uriBuilder = new UriBuilder(uri) { Scheme = "https", }; if (uri.Port == 80) { uriBuilder.Port = 443; } return uriBuilder.Uri; } return uri; } } }