From b4d2f9aa52eeacf7fa1632b5c9db9e957cf1d7ac Mon Sep 17 00:00:00 2001 From: Javier Calvarro Nelson Date: Wed, 15 Jan 2020 11:45:21 -0800 Subject: [PATCH] [Static Web Assets] Allow assets with empty base paths (#17414) --- .../StaticWebAssetsFileProvider.cs | 10 +++++++ .../StaticWebAssetsFileProviderTests.cs | 29 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/Hosting/Hosting/src/StaticWebAssets/StaticWebAssetsFileProvider.cs b/src/Hosting/Hosting/src/StaticWebAssets/StaticWebAssetsFileProvider.cs index e63fa411fc..5a9b578e98 100644 --- a/src/Hosting/Hosting/src/StaticWebAssets/StaticWebAssetsFileProvider.cs +++ b/src/Hosting/Hosting/src/StaticWebAssets/StaticWebAssetsFileProvider.cs @@ -46,6 +46,11 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets { var modifiedSub = NormalizePath(subpath); + if (BasePath == "/") + { + return InnerProvider.GetDirectoryContents(modifiedSub); + } + if (StartsWithBasePath(modifiedSub, out var physicalPath)) { return InnerProvider.GetDirectoryContents(physicalPath.Value); @@ -67,6 +72,11 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets { var modifiedSub = NormalizePath(subpath); + if (BasePath == "/") + { + return InnerProvider.GetFileInfo(subpath); + } + if (!StartsWithBasePath(modifiedSub, out var physicalPath)) { return new NotFoundFileInfo(subpath); diff --git a/src/Hosting/Hosting/test/StaticWebAssets/StaticWebAssetsFileProviderTests.cs b/src/Hosting/Hosting/test/StaticWebAssets/StaticWebAssetsFileProviderTests.cs index 5fc2800e0f..a51a85fc0a 100644 --- a/src/Hosting/Hosting/test/StaticWebAssets/StaticWebAssetsFileProviderTests.cs +++ b/src/Hosting/Hosting/test/StaticWebAssets/StaticWebAssetsFileProviderTests.cs @@ -117,6 +117,35 @@ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets Assert.True(provider.GetFileInfo("/_content/Static Web Assets.txt").Exists); } + [Fact] + public void GetDirectoryContents_HandlesEmptyBasePath() + { + // Arrange + var provider = new StaticWebAssetsFileProvider("/", + Path.Combine(AppContext.BaseDirectory, "testroot", "wwwroot")); + + // Act + var directory = provider.GetDirectoryContents("/Static Web/"); + + // Assert + Assert.Collection(directory, + file => + { + Assert.Equal("Static Web.txt", file.Name); + }); + } + + [Fact] + public void StaticWebAssetsFileProviderWithEmptyBasePath_FindsFile() + { + // Arrange & Act + var provider = new StaticWebAssetsFileProvider("/", + Path.Combine(AppContext.BaseDirectory, "testroot", "wwwroot")); + + // Assert + Assert.True(provider.GetFileInfo("/Static Web Assets.txt").Exists); + } + [Fact] public void GetFileInfo_DoesNotMatch_IncompletePrefixSegments() {