| File: ResourceCollectionUtilities.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.TagHelpers\src\Microsoft.AspNetCore.Mvc.TagHelpers.csproj (Microsoft.AspNetCore.Mvc.TagHelpers) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Rendering; namespace Microsoft.AspNetCore.Mvc.TagHelpers; internal static class ResourceCollectionUtilities { internal static bool TryResolveFromAssetCollection(ViewContext viewContext, string url, out string resolvedUrl) { var pathBase = viewContext.HttpContext.Request.PathBase; var assetCollection = viewContext.HttpContext.GetEndpoint()?.Metadata.GetMetadata<ResourceAssetCollection>(); if (assetCollection != null) { var value = url.StartsWith('/') ? url[1..] : url; if (assetCollection.IsContentSpecificUrl(value)) { resolvedUrl = url; return true; } var src = assetCollection[value]; if (!string.Equals(src, value, StringComparison.Ordinal)) { resolvedUrl = url.StartsWith('/') ? $"/{src}" : src; return true; } if (pathBase.HasValue && url.StartsWith(pathBase, StringComparison.OrdinalIgnoreCase)) { var length = pathBase.Value.EndsWith('/') ? pathBase.Value.Length : pathBase.Value.Length + 1; var relativePath = url[length..]; if (assetCollection.IsContentSpecificUrl(relativePath)) { resolvedUrl = url; return true; } src = assetCollection[relativePath]; if (!string.Equals(src, relativePath, StringComparison.Ordinal)) { if (pathBase.Value.EndsWith('/')) { resolvedUrl = $"{pathBase}{src}"; return true; } else { resolvedUrl = $"{pathBase}/{src}"; return true; } } } } resolvedUrl = null; return false; } }