| File: Internal\WebHostOptions.cs | Web Access |
| Project: src\aspnetcore\src\Hosting\Hosting\src\Microsoft.AspNetCore.Hosting.csproj (Microsoft.AspNetCore.Hosting) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; using System.Linq; using System.Reflection; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; namespace Microsoft.AspNetCore.Hosting; internal sealed class WebHostOptions { public WebHostOptions(IConfiguration primaryConfiguration, IConfiguration? fallbackConfiguration = null, IHostEnvironment? environment = null) { ArgumentNullException.ThrowIfNull(primaryConfiguration); string? GetConfig(string key) => primaryConfiguration[key] ?? fallbackConfiguration?[key]; ApplicationName = environment?.ApplicationName ?? GetConfig(WebHostDefaults.ApplicationKey) ?? Assembly.GetEntryAssembly()?.GetName().Name ?? string.Empty; StartupAssembly = GetConfig(WebHostDefaults.StartupAssemblyKey); DetailedErrors = WebHostUtilities.ParseBool(GetConfig(WebHostDefaults.DetailedErrorsKey)); CaptureStartupErrors = WebHostUtilities.ParseBool(GetConfig(WebHostDefaults.CaptureStartupErrorsKey)); Environment = environment?.EnvironmentName ?? GetConfig(WebHostDefaults.EnvironmentKey); WebRoot = GetConfig(WebHostDefaults.WebRootKey); ContentRootPath = environment?.ContentRootPath ?? GetConfig(WebHostDefaults.ContentRootKey); PreventHostingStartup = WebHostUtilities.ParseBool(GetConfig(WebHostDefaults.PreventHostingStartupKey)); SuppressStatusMessages = WebHostUtilities.ParseBool(GetConfig(WebHostDefaults.SuppressStatusMessagesKey)); ServerUrls = GetConfig(WebHostDefaults.ServerUrlsKey); PreferHostingUrls = WebHostUtilities.ParseBool(GetConfig(WebHostDefaults.PreferHostingUrlsKey)); // Search the primary assembly and configured assemblies. HostingStartupAssemblies = Split(ApplicationName, GetConfig(WebHostDefaults.HostingStartupAssembliesKey)); HostingStartupExcludeAssemblies = Split(GetConfig(WebHostDefaults.HostingStartupExcludeAssembliesKey)); var timeout = GetConfig(WebHostDefaults.ShutdownTimeoutKey); if (!string.IsNullOrEmpty(timeout) && int.TryParse(timeout, NumberStyles.None, CultureInfo.InvariantCulture, out var seconds)) { ShutdownTimeout = TimeSpan.FromSeconds(seconds); } } public string ApplicationName { get; } public bool PreventHostingStartup { get; } public bool SuppressStatusMessages { get; } public IReadOnlyList<string> HostingStartupAssemblies { get; } public IReadOnlyList<string> HostingStartupExcludeAssemblies { get; } public bool DetailedErrors { get; } public bool CaptureStartupErrors { get; } public string? Environment { get; } public string? StartupAssembly { get; } public string? WebRoot { get; } public string? ContentRootPath { get; } public TimeSpan ShutdownTimeout { get; } = TimeSpan.FromSeconds(30); public string? ServerUrls { get; } public bool PreferHostingUrls { get; } public IEnumerable<string> GetFinalHostingStartupAssemblies() { return HostingStartupAssemblies.Except(HostingStartupExcludeAssemblies, StringComparer.OrdinalIgnoreCase); } private static IReadOnlyList<string> Split(string? value) { return value?.Split(';', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) ?? Array.Empty<string>(); } private static IReadOnlyList<string> Split(string applicationName, string? environment) { if (string.IsNullOrEmpty(environment)) { return new[] { applicationName }; } return Split($"{applicationName};{environment}"); } }