| File: StaticAssetDescriptor.cs | Web Access |
| Project: src\aspnetcore\src\StaticAssets\src\Microsoft.AspNetCore.StaticAssets.csproj (Microsoft.AspNetCore.StaticAssets) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using System.Text.Json.Serialization; namespace Microsoft.AspNetCore.StaticAssets; /// <summary> /// The description of a static asset that was generated during the build process. /// </summary> [DebuggerDisplay($"{{{nameof(GetDebuggerDisplay)}(),nq}}")] public sealed class StaticAssetDescriptor { bool _isFrozen; private string? _route; private string? _assetFile; private string? _order; private IReadOnlyList<StaticAssetSelector> _selectors = []; private IReadOnlyList<StaticAssetProperty> _endpointProperties = []; private IReadOnlyList<StaticAssetResponseHeader> _responseHeaders = []; /// <summary> /// The order of the endpoint in the routing table. When null or empty, the default order of -100 is used. /// </summary> [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? Order { get => _order; set => _order = !_isFrozen ? value : throw new InvalidOperationException("StaticAssetDescriptor is frozen and doesn't accept further changes"); } /// <summary> /// The route that the asset is served from. /// </summary> public required string Route { get => _route ?? throw new InvalidOperationException("Route is required"); set => _route = !_isFrozen ? value : throw new InvalidOperationException("StaticAssetDescriptor is frozen and doesn't accept further changes"); } /// <summary> /// The path to the asset file from the wwwroot folder. /// </summary> [JsonPropertyName("AssetFile")] public required string AssetPath { get => _assetFile ?? throw new InvalidOperationException("AssetPath is required"); set => _assetFile = !_isFrozen ? value : throw new InvalidOperationException("StaticAssetDescriptor is frozen and doesn't accept further changes"); } /// <summary> /// A list of selectors that are used to discriminate between two or more assets with the same route. /// </summary> [JsonPropertyName("Selectors")] public IReadOnlyList<StaticAssetSelector> Selectors { get => _selectors; set => _selectors = !_isFrozen ? value : throw new InvalidOperationException("StaticAssetDescriptor is frozen and doesn't accept further changes"); } /// <summary> /// A list of properties that are associated with the endpoint. /// </summary> [JsonPropertyName("EndpointProperties")] public IReadOnlyList<StaticAssetProperty> Properties { get => _endpointProperties; set => _endpointProperties = !_isFrozen ? value : throw new InvalidOperationException("StaticAssetDescriptor is frozen and doesn't accept further changes"); } /// <summary> /// A list of headers to apply to the response when this resource is served. /// </summary> [JsonPropertyName("ResponseHeaders")] public IReadOnlyList<StaticAssetResponseHeader> ResponseHeaders { get => _responseHeaders; set => _responseHeaders = !_isFrozen ? value : throw new InvalidOperationException("StaticAssetDescriptor is frozen and doesn't accept further changes"); } private string GetDebuggerDisplay() { return $"Route: {Route} Path: {AssetPath}"; } internal void Freeze() { _isFrozen = true; } }