Skip to content

Commit 99ae156

Browse files
authored
Fix for issue 40774 RequestDelegateFactory null param default (#41025)
1 parent 602b3f7 commit 99ae156

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/Http/Http.Extensions/src/RequestDelegateFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,7 @@ private static Expression BindParameterFromValue(ParameterInfo parameter, Expres
11321132
? Expression.IfThen(TempSourceStringNotNullExpr, tryParseExpression)
11331133
: Expression.IfThenElse(TempSourceStringNotNullExpr, tryParseExpression,
11341134
Expression.Assign(argument,
1135-
Expression.Constant(parameter.DefaultValue)));
1135+
Expression.Constant(parameter.DefaultValue, parameter.ParameterType)));
11361136

11371137
var loopExit = Expression.Label();
11381138

src/Http/Http.Extensions/test/RequestDelegateFactoryTests.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,11 @@ private static void TestOptionalNullable(HttpContext httpContext, int? value = 4
226226
httpContext.Items.Add("input", value);
227227
}
228228

229+
private static void TestOptionalNullableNull(HttpContext httpContext, double? value = null)
230+
{
231+
httpContext.Items.Add("input", (object?)value ?? "Null");
232+
}
233+
229234
private static void TestOptionalString(HttpContext httpContext, string value = "default")
230235
{
231236
httpContext.Items.Add("input", value);
@@ -364,13 +369,26 @@ public async Task RequestDelegatePopulatesFromNullableOptionalParameter()
364369
{
365370
var httpContext = CreateHttpContext();
366371

367-
var factoryResult = RequestDelegateFactory.Create(TestOptional);
372+
var factoryResult = RequestDelegateFactory.Create(TestOptionalNullable);
368373
var requestDelegate = factoryResult.RequestDelegate;
369374

370375
await requestDelegate(httpContext);
371376

372377
Assert.Equal(42, httpContext.Items["input"]);
373378
}
379+
380+
[Fact]
381+
public async Task RequestDelegatePopulatesFromNullableNullOptionalParameter()
382+
{
383+
var httpContext = CreateHttpContext();
384+
385+
var factoryResult = RequestDelegateFactory.Create(TestOptionalNullableNull);
386+
var requestDelegate = factoryResult.RequestDelegate;
387+
388+
await requestDelegate(httpContext);
389+
390+
Assert.Equal("Null", httpContext.Items["input"]);
391+
}
374392

375393
[Fact]
376394
public async Task RequestDelegatePopulatesFromOptionalStringParameter()

0 commit comments

Comments
 (0)