diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/ControllerActionInvoker.cs b/src/Mvc/Mvc.Core/src/Infrastructure/ControllerActionInvoker.cs index 2d2fcfcaf1fa..3824d233a899 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/ControllerActionInvoker.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/ControllerActionInvoker.cs @@ -546,7 +546,7 @@ private Task BindArgumentsAsync() { var parameterInfo = declaredParameterInfos[index]; - if (!actionParameters.TryGetValue(parameterInfo.Name!, out var value)) + if (!actionParameters.TryGetValue(parameterInfo.Name!, out var value) || value is null) { value = actionMethodExecutor.GetDefaultValueForParameter(index); } diff --git a/src/Mvc/test/Mvc.FunctionalTests/DefaultValuesTest.cs b/src/Mvc/test/Mvc.FunctionalTests/DefaultValuesTest.cs index 235e3c9a73fb..b528c6a4c151 100644 --- a/src/Mvc/test/Mvc.FunctionalTests/DefaultValuesTest.cs +++ b/src/Mvc/test/Mvc.FunctionalTests/DefaultValuesTest.cs @@ -99,4 +99,18 @@ public async Task Controller_WithDefaultParameterValues_ForStructs_ReturnsBoundV // Assert Assert.Equal(expected, response); } + + [Fact] + public async Task EchoValue_DefaultParameterValue_ForGlobbedPath() + { + // Arrange + var expected = $"index.html"; + var url = "http://localhost/DefaultValues/EchoValue_DefaultParameterValue_ForGlobbedPath"; + + // Act + var response = await Client.GetStringAsync(url); + + // Assert + Assert.Equal(expected, response); + } } diff --git a/src/Mvc/test/WebSites/BasicWebSite/Controllers/DefaultValuesController.cs b/src/Mvc/test/WebSites/BasicWebSite/Controllers/DefaultValuesController.cs index 86f32fc04067..fc3f31dc0026 100644 --- a/src/Mvc/test/WebSites/BasicWebSite/Controllers/DefaultValuesController.cs +++ b/src/Mvc/test/WebSites/BasicWebSite/Controllers/DefaultValuesController.cs @@ -27,4 +27,11 @@ public string EchoValue_DefaultParameterValue_ForStructs( { return $"{guid}, {timeSpan}"; } + + [HttpGet] + [Route("/[controller]/EchoValue_DefaultParameterValue_ForGlobbedPath/{**path}")] + public string EchoValue_DefaultParameterValue_ForGlobbedPath(string path = "index.html") + { + return path; + } }