diff --git a/src/StaticFiles/Directory.Build.props b/src/StaticFiles/Directory.Build.props
index 2c2d9cc9d0..c46c5e323b 100644
--- a/src/StaticFiles/Directory.Build.props
+++ b/src/StaticFiles/Directory.Build.props
@@ -14,7 +14,6 @@
$(MSBuildThisFileDirectory)
$(MSBuildThisFileDirectory)build\Key.snk
true
- true
true
diff --git a/src/StaticFiles/Directory.Build.targets b/src/StaticFiles/Directory.Build.targets
index 53b3f6e1da..78626b773e 100644
--- a/src/StaticFiles/Directory.Build.targets
+++ b/src/StaticFiles/Directory.Build.targets
@@ -1,7 +1,10 @@
-
+
$(MicrosoftNETCoreApp20PackageVersion)
$(MicrosoftNETCoreApp21PackageVersion)
+ $(MicrosoftNETCoreApp22PackageVersion)
$(NETStandardLibrary20PackageVersion)
+
+ 99.9
diff --git a/src/StaticFiles/StaticFiles.sln b/src/StaticFiles/StaticFiles.sln
index 0e5ab3b48f..d35843bf61 100644
--- a/src/StaticFiles/StaticFiles.sln
+++ b/src/StaticFiles/StaticFiles.sln
@@ -31,6 +31,19 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.RangeH
shared\Microsoft.AspNetCore.RangeHelper.Sources\RangeHelper.cs = shared\Microsoft.AspNetCore.RangeHelper.Sources\RangeHelper.cs
EndProjectSection
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{DE015849-E126-4DFA-A754-E1AC3B1E7925}"
+ ProjectSection(SolutionItems) = preProject
+ .appveyor.yml = .appveyor.yml
+ .travis.yml = .travis.yml
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{D3F67455-9FB9-4354-93EC-B05D755114E9}"
+ ProjectSection(SolutionItems) = preProject
+ build\dependencies.props = build\dependencies.props
+ build\repo.props = build\repo.props
+ build\sources.props = build\sources.props
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -106,5 +119,9 @@ Global
{FDF0539C-1F62-4B78-91B1-C687886931CA} = {EF02AFE8-7C15-4DDB-8B2C-58A676112A98}
{D3D752C4-4CDF-4F18-AC7F-48CB980A69DA} = {EF02AFE8-7C15-4DDB-8B2C-58A676112A98}
{DB6A1D14-B8A2-488F-9C4B-422FD45C8853} = {360DC2F8-EEB4-4C69-9784-C686EAD78279}
+ {D3F67455-9FB9-4354-93EC-B05D755114E9} = {DE015849-E126-4DFA-A754-E1AC3B1E7925}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {AF7F03BE-0DB2-48EF-8185-7698995658A6}
EndGlobalSection
EndGlobal
diff --git a/src/StaticFiles/build/dependencies.props b/src/StaticFiles/build/dependencies.props
index 531f1f0941..aeb5a7c33c 100644
--- a/src/StaticFiles/build/dependencies.props
+++ b/src/StaticFiles/build/dependencies.props
@@ -2,38 +2,32 @@
$(MSBuildAllProjects);$(MSBuildThisFileFullPath)
-
-
-
- 2.1.3-rtm-15802
- 2.0.0
- 2.1.2
+
+ 2.2.0-preview2-20181004.6
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 0.6.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.2.0-preview3-35425
+ 2.0.9
+ 2.1.3
+ 2.2.0-preview3-27001-02
15.6.1
4.7.49
2.0.3
- 0.8.0
+ 0.10.0
2.3.1
- 2.4.0-beta.1.build3945
+ 2.4.0
-
-
-
-
-
- 2.1.1
- 2.1.1
- 2.1.1
- 2.1.1
- 2.1.1
- 0.5.1
- 2.1.2
- 2.1.1
- 2.1.0
- 2.1.1
- 2.1.1
- 2.1.1
- 2.1.1
- 2.1.1
-
-
\ No newline at end of file
+
+
diff --git a/src/StaticFiles/build/repo.props b/src/StaticFiles/build/repo.props
index dab1601c88..f1fe24dd27 100644
--- a/src/StaticFiles/build/repo.props
+++ b/src/StaticFiles/build/repo.props
@@ -4,12 +4,13 @@
Internal.AspNetCore.Universe.Lineup
- 2.1.0-rc1-*
+ 2.2.0-*
https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json
+
diff --git a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DefaultFilesMiddleware.cs b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DefaultFilesMiddleware.cs
index a401759b3d..3c3a1c60b8 100644
--- a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DefaultFilesMiddleware.cs
+++ b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DefaultFilesMiddleware.cs
@@ -62,9 +62,8 @@ namespace Microsoft.AspNetCore.StaticFiles
///
public Task Invoke(HttpContext context)
{
- PathString subpath;
if (Helpers.IsGetOrHeadMethod(context.Request.Method)
- && Helpers.TryMatchPath(context, _matchUrl, forDirectory: true, subpath: out subpath))
+ && Helpers.TryMatchPath(context, _matchUrl, forDirectory: true, subpath: out var subpath))
{
var dirContents = _fileProvider.GetDirectoryContents(subpath.Value);
if (dirContents.Exists)
@@ -73,7 +72,7 @@ namespace Microsoft.AspNetCore.StaticFiles
for (int matchIndex = 0; matchIndex < _options.DefaultFileNames.Count; matchIndex++)
{
string defaultFile = _options.DefaultFileNames[matchIndex];
- var file = _fileProvider.GetFileInfo(subpath + defaultFile);
+ var file = _fileProvider.GetFileInfo(subpath.Value + defaultFile);
// TryMatchPath will make sure subpath always ends with a "/" by adding it if needed.
if (file.Exists)
{
diff --git a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DefaultFilesOptions.cs b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DefaultFilesOptions.cs
index 72b577dfcc..646774315d 100644
--- a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DefaultFilesOptions.cs
+++ b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DefaultFilesOptions.cs
@@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Builder
: base(sharedOptions)
{
// Prioritized list
- DefaultFileNames = new List()
+ DefaultFileNames = new List
{
"default.htm",
"default.html",
diff --git a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DirectoryBrowserMiddleware.cs b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DirectoryBrowserMiddleware.cs
index 71765d0459..0ac1258c83 100644
--- a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DirectoryBrowserMiddleware.cs
+++ b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/DirectoryBrowserMiddleware.cs
@@ -79,11 +79,9 @@ namespace Microsoft.AspNetCore.StaticFiles
public Task Invoke(HttpContext context)
{
// Check if the URL matches any expected paths
- PathString subpath;
- IDirectoryContents contents;
if (Helpers.IsGetOrHeadMethod(context.Request.Method)
- && Helpers.TryMatchPath(context, _matchUrl, forDirectory: true, subpath: out subpath)
- && TryGetDirectoryInfo(subpath, out contents))
+ && Helpers.TryMatchPath(context, _matchUrl, forDirectory: true, subpath: out var subpath)
+ && TryGetDirectoryInfo(subpath, out var contents))
{
// If the path matches a directory but does not end in a slash, redirect to add the slash.
// This prevents relative links from breaking.
diff --git a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/FileExtensionContentTypeProvider.cs b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/FileExtensionContentTypeProvider.cs
index f2e8f1b788..ea5775c73e 100644
--- a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/FileExtensionContentTypeProvider.cs
+++ b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/FileExtensionContentTypeProvider.cs
@@ -331,7 +331,8 @@ namespace Microsoft.AspNetCore.StaticFiles
{ ".vsto", "application/x-ms-vsto" },
{ ".vsw", "application/vnd.visio" },
{ ".vsx", "application/vnd.visio" },
- { ".vtx", "application/vnd.visio" },
+ { ".vtx", "application/vnd.visio" },
+ { ".wasm", "application/wasm" },
{ ".wav", "audio/wav" },
{ ".wax", "audio/x-ms-wax" },
{ ".wbmp", "image/vnd.wap.wbmp" },
@@ -456,4 +457,4 @@ namespace Microsoft.AspNetCore.StaticFiles
return path.Substring(index);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/StaticFileContext.cs b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/StaticFileContext.cs
index f5024dcb23..501be2d71c 100644
--- a/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/StaticFileContext.cs
+++ b/src/StaticFiles/src/Microsoft.AspNetCore.StaticFiles/StaticFileContext.cs
@@ -282,7 +282,7 @@ namespace Microsoft.AspNetCore.StaticFiles
// it is not returned for 304, 412, and 416
_response.ContentLength = _length;
}
- _options.OnPrepareResponse(new StaticFileResponseContext()
+ _options.OnPrepareResponse(new StaticFileResponseContext
{
Context = _context,
File = _fileInfo,
@@ -360,8 +360,7 @@ namespace Microsoft.AspNetCore.StaticFiles
return;
}
- long start, length;
- _responseHeaders.ContentRange = ComputeContentRange(_range, out start, out length);
+ _responseHeaders.ContentRange = ComputeContentRange(_range, out var start, out var length);
_response.ContentLength = length;
ApplyResponseHeaders(Constants.Status206PartialContent);
diff --git a/src/StaticFiles/test/Directory.Build.props b/src/StaticFiles/test/Directory.Build.props
index c6e5ecaf30..eb9c44a2b9 100644
--- a/src/StaticFiles/test/Directory.Build.props
+++ b/src/StaticFiles/test/Directory.Build.props
@@ -1,10 +1,10 @@
-
+
- netcoreapp2.1
+ netcoreapp2.2
$(DeveloperBuildTestTfms)
- netcoreapp2.1;netcoreapp2.0
+
$(StandardTestTfms);net461
diff --git a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.FunctionalTests/StaticFileMiddlewareTests.cs b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.FunctionalTests/StaticFileMiddlewareTests.cs
index b2ba4a4f47..268accc699 100644
--- a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.FunctionalTests/StaticFileMiddlewareTests.cs
+++ b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.FunctionalTests/StaticFileMiddlewareTests.cs
@@ -15,25 +15,27 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Server.IntegrationTesting;
+using Microsoft.AspNetCore.Server.IntegrationTesting.Common;
using Microsoft.AspNetCore.Testing.xunit;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.StaticFiles
{
- public class StaticFileMiddlewareTests
+ public class StaticFileMiddlewareTests : LoggedTest
{
[Fact]
public async Task ReturnsNotFoundWithoutWwwroot()
{
- var baseAddress = "http://localhost:12345";
var builder = new WebHostBuilder()
+ .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseKestrel()
.Configure(app => app.UseStaticFiles());
- using (var server = builder.Start(baseAddress))
+ using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{
- using (var client = new HttpClient() { BaseAddress = new Uri(baseAddress) })
+ using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) })
{
var response = await client.GetAsync("TestDocument.txt");
@@ -45,22 +47,22 @@ namespace Microsoft.AspNetCore.StaticFiles
[Fact]
public async Task FoundFile_LastModifiedTrimsSeconds()
{
- var baseAddress = "http://localhost:12345";
var builder = new WebHostBuilder()
+ .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseKestrel()
.UseWebRoot(AppContext.BaseDirectory)
.Configure(app => app.UseStaticFiles());
- using (var server = builder.Start(baseAddress))
+ using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{
- using (var client = new HttpClient() { BaseAddress = new Uri(baseAddress) })
+ using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) })
{
var last = File.GetLastWriteTimeUtc(Path.Combine(AppContext.BaseDirectory, "TestDocument.txt"));
var response = await client.GetAsync("TestDocument.txt");
- var trimed = new DateTimeOffset(last.Year, last.Month, last.Day, last.Hour, last.Minute, last.Second, TimeSpan.Zero).ToUniversalTime();
+ var trimmed = new DateTimeOffset(last.Year, last.Month, last.Day, last.Hour, last.Minute, last.Second, TimeSpan.Zero).ToUniversalTime();
- Assert.Equal(response.Content.Headers.LastModified.Value, trimed);
+ Assert.Equal(response.Content.Headers.LastModified.Value, trimmed);
}
}
}
@@ -86,20 +88,20 @@ namespace Microsoft.AspNetCore.StaticFiles
private async Task FoundFile_Served(string baseUrl, string baseDir, string requestUrl)
{
- var baseAddress = "http://localhost:12345";
var builder = new WebHostBuilder()
+ .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseKestrel()
.UseWebRoot(Path.Combine(AppContext.BaseDirectory, baseDir))
- .Configure(app => app.UseStaticFiles(new StaticFileOptions()
+ .Configure(app => app.UseStaticFiles(new StaticFileOptions
{
RequestPath = new PathString(baseUrl),
}));
- using (var server = builder.Start(baseAddress))
+ using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{
var hostingEnvironment = server.Services.GetService();
- using (var client = new HttpClient() { BaseAddress = new Uri(baseAddress) })
+ using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) })
{
var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl));
var response = await client.GetAsync(requestUrl);
@@ -124,20 +126,20 @@ namespace Microsoft.AspNetCore.StaticFiles
[MemberData(nameof(ExistingFiles))]
public async Task HeadFile_HeadersButNotBodyServed(string baseUrl, string baseDir, string requestUrl)
{
- var baseAddress = "http://localhost:12345";
var builder = new WebHostBuilder()
+ .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseKestrel()
.UseWebRoot(Path.Combine(AppContext.BaseDirectory, baseDir))
- .Configure(app => app.UseStaticFiles(new StaticFileOptions()
+ .Configure(app => app.UseStaticFiles(new StaticFileOptions
{
RequestPath = new PathString(baseUrl),
}));
- using (var server = builder.Start(baseAddress))
+ using (var server = builder.Start(TestUrlHelper.GetTestUrl(ServerType.Kestrel)))
{
var hostingEnvironment = server.Services.GetService();
- using (var client = new HttpClient() { BaseAddress = new Uri(baseAddress) })
+ using (var client = new HttpClient { BaseAddress = new Uri(server.GetAddress()) })
{
var fileInfo = hostingEnvironment.WebRootFileProvider.GetFileInfo(Path.GetFileName(requestUrl));
var request = new HttpRequestMessage(HttpMethod.Head, requestUrl);
@@ -172,18 +174,18 @@ namespace Microsoft.AspNetCore.StaticFiles
[OSSkipCondition(OperatingSystems.MacOSX)]
public void ClientDisconnect_WebListener_NoWriteExceptionThrown()
{
- ClientDisconnect_NoWriteExceptionThrown(ServerType.WebListener);
+ ClientDisconnect_NoWriteExceptionThrown(ServerType.HttpSys);
}
private void ClientDisconnect_NoWriteExceptionThrown(ServerType serverType)
{
var interval = TimeSpan.FromSeconds(15);
- var baseAddress = "http://localhost:12345";
var requestReceived = new ManualResetEvent(false);
- var requestCacelled = new ManualResetEvent(false);
+ var requestCancelled = new ManualResetEvent(false);
var responseComplete = new ManualResetEvent(false);
Exception exception = null;
var builder = new WebHostBuilder()
+ .ConfigureServices(services => services.AddSingleton(LoggerFactory))
.UseWebRoot(Path.Combine(AppContext.BaseDirectory))
.Configure(app =>
{
@@ -192,7 +194,7 @@ namespace Microsoft.AspNetCore.StaticFiles
try
{
requestReceived.Set();
- Assert.True(requestCacelled.WaitOne(interval), "not cancelled");
+ Assert.True(requestCancelled.WaitOne(interval), "not cancelled");
Assert.True(context.RequestAborted.WaitHandle.WaitOne(interval), "not aborted");
await next();
}
@@ -205,7 +207,7 @@ namespace Microsoft.AspNetCore.StaticFiles
app.UseStaticFiles();
});
- if (serverType == ServerType.WebListener)
+ if (serverType == ServerType.HttpSys)
{
builder.UseHttpSys();
}
@@ -214,15 +216,15 @@ namespace Microsoft.AspNetCore.StaticFiles
builder.UseKestrel();
}
- using (var server = builder.Start(baseAddress))
+ using (var server = builder.Start(TestUrlHelper.GetTestUrl(serverType)))
{
// We don't use HttpClient here because it's disconnect behavior varies across platforms.
- var socket = SendSocketRequestAsync(baseAddress, "/TestDocument1MB.txt");
+ var socket = SendSocketRequestAsync(server.GetAddress(), "/TestDocument1MB.txt");
Assert.True(requestReceived.WaitOne(interval), "not received");
socket.LingerState = new LingerOption(true, 0);
socket.Dispose();
- requestCacelled.Set();
+ requestCancelled.Set();
Assert.True(responseComplete.WaitOne(interval), "not completed");
Assert.Null(exception);
diff --git a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/CacheHeaderTests.cs b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/CacheHeaderTests.cs
index 862346a9d8..7c70ce4551 100644
--- a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/CacheHeaderTests.cs
+++ b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/CacheHeaderTests.cs
@@ -69,7 +69,7 @@ namespace Microsoft.AspNetCore.StaticFiles
[Theory]
[MemberData(nameof(SupportedMethods))]
- public async Task IfMatchShouldBeServedForAstrisk(HttpMethod method)
+ public async Task IfMatchShouldBeServedForAsterisk(HttpMethod method)
{
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer());
var req = new HttpRequestMessage(method, "http://localhost/SubFolder/extra.xml");
@@ -230,7 +230,7 @@ namespace Microsoft.AspNetCore.StaticFiles
DateTimeOffset lastModified = resp1.Content.Headers.LastModified.Value;
DateTimeOffset pastDate = lastModified.AddHours(-1);
- DateTimeOffset furtureDate = lastModified.AddHours(1);
+ DateTimeOffset futureDate = lastModified.AddHours(1);
HttpResponseMessage resp2 = await server
.CreateRequest("/SubFolder/extra.xml")
@@ -247,7 +247,7 @@ namespace Microsoft.AspNetCore.StaticFiles
HttpResponseMessage resp4 = await server
.CreateRequest("/SubFolder/extra.xml")
.AddHeader("If-None-Match", "\"fake\"")
- .And(req => req.Headers.IfModifiedSince = furtureDate)
+ .And(req => req.Headers.IfModifiedSince = futureDate)
.SendAsync(method.Method);
Assert.Equal(HttpStatusCode.OK, resp2.StatusCode);
@@ -322,7 +322,7 @@ namespace Microsoft.AspNetCore.StaticFiles
[Theory]
[MemberData(nameof(SupportedMethods))]
- public async Task SuppportsIfModifiedDateFormats(HttpMethod method)
+ public async Task SupportsIfModifiedDateFormats(HttpMethod method)
{
TestServer server = StaticFilesTestServer.Create(app => app.UseFileServer());
HttpResponseMessage res1 = await server
diff --git a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/DefaultContentTypeProviderTests.cs b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/DefaultContentTypeProviderTests.cs
index 1095b64350..5df588c802 100644
--- a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/DefaultContentTypeProviderTests.cs
+++ b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/DefaultContentTypeProviderTests.cs
@@ -16,11 +16,10 @@ namespace Microsoft.AspNetCore.StaticFiles
}
[Fact]
- public void KnownExtensionsReturnTrye()
+ public void KnownExtensionsReturnType()
{
var provider = new FileExtensionContentTypeProvider();
- string contentType;
- Assert.True(provider.TryGetContentType("known.txt", out contentType));
+ Assert.True(provider.TryGetContentType("known.txt", out var contentType));
Assert.Equal("text/plain", contentType);
}
@@ -36,8 +35,7 @@ namespace Microsoft.AspNetCore.StaticFiles
public void DashedExtensionsShouldBeMatched()
{
var provider = new FileExtensionContentTypeProvider();
- string contentType;
- Assert.True(provider.TryGetContentType("known.dvr-ms", out contentType));
+ Assert.True(provider.TryGetContentType("known.dvr-ms", out var contentType));
Assert.Equal("video/x-ms-dvr", contentType);
}
@@ -45,8 +43,7 @@ namespace Microsoft.AspNetCore.StaticFiles
public void BothSlashFormatsAreUnderstood()
{
var provider = new FileExtensionContentTypeProvider();
- string contentType;
- Assert.True(provider.TryGetContentType(@"/first/example.txt", out contentType));
+ Assert.True(provider.TryGetContentType(@"/first/example.txt", out var contentType));
Assert.Equal("text/plain", contentType);
Assert.True(provider.TryGetContentType(@"\second\example.txt", out contentType));
Assert.Equal("text/plain", contentType);
@@ -56,8 +53,7 @@ namespace Microsoft.AspNetCore.StaticFiles
public void DotsInDirectoryAreIgnored()
{
var provider = new FileExtensionContentTypeProvider();
- string contentType;
- Assert.True(provider.TryGetContentType(@"/first.css/example.txt", out contentType));
+ Assert.True(provider.TryGetContentType(@"/first.css/example.txt", out var contentType));
Assert.Equal("text/plain", contentType);
Assert.True(provider.TryGetContentType(@"\second.css\example.txt", out contentType));
Assert.Equal("text/plain", contentType);
diff --git a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/DefaultFilesMiddlewareTests.cs b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/DefaultFilesMiddlewareTests.cs
index e50557f277..7df375d2d4 100644
--- a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/DefaultFilesMiddlewareTests.cs
+++ b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/DefaultFilesMiddlewareTests.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// 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;
@@ -9,6 +9,7 @@ using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Extensions;
using Microsoft.AspNetCore.TestHost;
using Microsoft.AspNetCore.Testing.xunit;
using Microsoft.Extensions.FileProviders;
@@ -75,6 +76,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("", @".", "/SubFolder/")]
[InlineData("", @"./", "/SubFolder/")]
[InlineData("", @"./SubFolder", "/")]
+ [InlineData("", @"./SubFolder", "/你好/")]
+ [InlineData("", @"./SubFolder", "/你好/世界/")]
public async Task FoundDirectoryWithDefaultFile_PathModified_All(string baseUrl, string baseDir, string requestUrl)
{
await FoundDirectoryWithDefaultFile_PathModified(baseUrl, baseDir, requestUrl);
@@ -85,6 +88,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[OSSkipCondition(OperatingSystems.MacOSX)]
[InlineData("", @".\", "/SubFolder/")]
[InlineData("", @".\subFolder", "/")]
+ [InlineData("", @".\SubFolder", "/你好/")]
+ [InlineData("", @".\SubFolder", "/你好/世界/")]
public async Task FoundDirectoryWithDefaultFile_PathModified_Windows(string baseUrl, string baseDir, string requestUrl)
{
await FoundDirectoryWithDefaultFile_PathModified(baseUrl, baseDir, requestUrl);
@@ -114,6 +119,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[InlineData("", @".", "/SubFolder", "")]
[InlineData("", @"./", "/SubFolder", "")]
[InlineData("", @"./", "/SubFolder", "?a=b")]
+ [InlineData("", @"./SubFolder", "/你好", "?a=b")]
+ [InlineData("", @"./SubFolder", "/你好/世界", "?a=b")]
public async Task NearMatch_RedirectAddSlash_All(string baseUrl, string baseDir, string requestUrl, string queryString)
{
await NearMatch_RedirectAddSlash(baseUrl, baseDir, requestUrl, queryString);
@@ -124,6 +131,8 @@ namespace Microsoft.AspNetCore.StaticFiles
[OSSkipCondition(OperatingSystems.MacOSX)]
[InlineData("", @".\", "/SubFolder", "")]
[InlineData("", @".\", "/SubFolder", "?a=b")]
+ [InlineData("", @".\SubFolder", "/你好", "?a=b")]
+ [InlineData("", @".\SubFolder", "/你好/世界", "?a=b")]
public async Task NearMatch_RedirectAddSlash_Windows(string baseUrl, string baseDir, string requestUrl, string queryString)
{
await NearMatch_RedirectAddSlash(baseUrl, baseDir, requestUrl, queryString);
@@ -141,7 +150,10 @@ namespace Microsoft.AspNetCore.StaticFiles
var response = await server.CreateRequest(requestUrl + queryString).GetAsync();
Assert.Equal(HttpStatusCode.Moved, response.StatusCode);
- Assert.Equal(requestUrl + "/" + queryString, response.Headers.GetValues("Location").FirstOrDefault());
+ // the url in the header of `Location: /xxx/xxx` should be encoded
+ var expectedURL = UriHelper.BuildRelative(baseUrl, requestUrl + "/", new QueryString(queryString), new FragmentString());
+ var actualURL = response.Headers.GetValues("Location").FirstOrDefault();
+ Assert.Equal(expectedURL, actualURL);
Assert.Empty((await response.Content.ReadAsByteArrayAsync()));
}
}
@@ -169,12 +181,12 @@ namespace Microsoft.AspNetCore.StaticFiles
private async Task PostDirectory_PassesThrough(string baseUrl, string baseDir, string requestUrl)
{
- using (var fileProvder = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
+ using (var fileProvider = new PhysicalFileProvider(Path.Combine(AppContext.BaseDirectory, baseDir)))
{
var server = StaticFilesTestServer.Create(app => app.UseDefaultFiles(new DefaultFilesOptions
{
RequestPath = new PathString(baseUrl),
- FileProvider = fileProvder
+ FileProvider = fileProvider
}));
var response = await server.CreateRequest(requestUrl).GetAsync();
diff --git a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFileContextTest.cs b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFileContextTest.cs
index a1da44fd38..f4fca87a36 100644
--- a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFileContextTest.cs
+++ b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFileContextTest.cs
@@ -70,8 +70,7 @@ namespace Microsoft.AspNetCore.StaticFiles
public IFileInfo GetFileInfo(string subpath)
{
- IFileInfo result;
- if (_files.TryGetValue(subpath, out result))
+ if (_files.TryGetValue(subpath, out var result))
{
return result;
}
diff --git a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFileMiddlewareTests.cs b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFileMiddlewareTests.cs
index 31c6894d2b..2c5c30df63 100644
--- a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFileMiddlewareTests.cs
+++ b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFileMiddlewareTests.cs
@@ -101,9 +101,9 @@ namespace Microsoft.AspNetCore.StaticFiles
var response = await server.CreateRequest("TestDocument.txt").GetAsync();
var last = fileInfo.LastModified;
- var trimed = new DateTimeOffset(last.Year, last.Month, last.Day, last.Hour, last.Minute, last.Second, last.Offset).ToUniversalTime();
+ var trimmed = new DateTimeOffset(last.Year, last.Month, last.Day, last.Hour, last.Minute, last.Second, last.Offset).ToUniversalTime();
- Assert.Equal(response.Content.Headers.LastModified.Value, trimed);
+ Assert.Equal(response.Content.Headers.LastModified.Value, trimmed);
}
}
diff --git a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/SubFolder/你好/default.html b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/SubFolder/你好/default.html
new file mode 100644
index 0000000000..4740d83682
--- /dev/null
+++ b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/SubFolder/你好/default.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+ Hello World
+
+
\ No newline at end of file
diff --git a/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/SubFolder/你好/世界/default.html b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/SubFolder/你好/世界/default.html
new file mode 100644
index 0000000000..4740d83682
--- /dev/null
+++ b/src/StaticFiles/test/Microsoft.AspNetCore.StaticFiles.Tests/SubFolder/你好/世界/default.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+ Hello World
+
+
\ No newline at end of file
diff --git a/src/StaticFiles/version.props b/src/StaticFiles/version.props
index 669c874829..4889a26987 100644
--- a/src/StaticFiles/version.props
+++ b/src/StaticFiles/version.props
@@ -1,6 +1,6 @@
-
+
- 2.1.1
+ 2.2.0
rtm
$(VersionPrefix)
$(VersionPrefix)-$(VersionSuffix)-final