ソースを参照

Use default if no value was bound for parameter (#39427)

Safia Abdalla 4 年 前
コミット
b611dc1c19

+ 1 - 1
src/Mvc/Mvc.Core/src/Infrastructure/ControllerActionInvoker.cs

@@ -546,7 +546,7 @@ internal class ControllerActionInvoker : ResourceInvoker, IActionInvoker
         {
             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);
             }

+ 14 - 0
src/Mvc/test/Mvc.FunctionalTests/DefaultValuesTest.cs

@@ -99,4 +99,18 @@ public class DefaultValuesTest : IClassFixture<MvcTestFixture<BasicWebSite.Start
         // 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);
+    }
 }

+ 7 - 0
src/Mvc/test/WebSites/BasicWebSite/Controllers/DefaultValuesController.cs

@@ -27,4 +27,11 @@ public class DefaultValuesController : Controller
     {
         return $"{guid}, {timeSpan}";
     }
+
+    [HttpGet]
+    [Route("/[controller]/EchoValue_DefaultParameterValue_ForGlobbedPath/{**path}")]
+    public string EchoValue_DefaultParameterValue_ForGlobbedPath(string path = "index.html")
+    {
+        return path;
+    }
 }