diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index e659cd8c84b6..e99b3610be66 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -41,258 +41,258 @@
https://github.com/dotnet/efcore
32fe1fd7afa3fa6c9af14c4f0da51068202491a1
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
https://github.com/dotnet/source-build-externals
487e3990066862c81960a6d053b9d04c67f9d2a8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
https://github.com/dotnet/xdt
@@ -302,9 +302,9 @@
-
+
https://github.com/dotnet/runtime
- e7926d6bb96976d9fc7aa1ac0a4e7a40f965b688
+ 6123cb00bbec8ae3500c970890f5b0efcf7950e8
https://github.com/dotnet/arcade
diff --git a/eng/Versions.props b/eng/Versions.props
index 8698283776c7..1fa55d05cca9 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -63,69 +63,69 @@
-->
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
- 8.0.0-preview.3.23152.1
- 8.0.0-preview.3.23152.1
+ 8.0.0-preview.3.23155.6
+ 8.0.0-preview.3.23155.6
8.0.0-preview.3.23152.4
8.0.0-preview.3.23152.4
diff --git a/src/Http/Http.Extensions/gen/RequestDelegateGeneratorSources.cs b/src/Http/Http.Extensions/gen/RequestDelegateGeneratorSources.cs
index b8bcc470c8dd..1b1613d4be91 100644
--- a/src/Http/Http.Extensions/gen/RequestDelegateGeneratorSources.cs
+++ b/src/Http/Http.Extensions/gen/RequestDelegateGeneratorSources.cs
@@ -165,6 +165,13 @@ private static Task WriteToResponseAsync(T? value, HttpContext httpContext, J
return T.BindAsync(context, parameter);
}
}
+
+ {{GeneratedCodeAttribute}}
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
""";
private static string GetGenericThunks(string genericThunks) => genericThunks != string.Empty ? $$"""
diff --git a/src/Http/Http.Extensions/gen/StaticRouteHandlerModel/EndpointParameter.cs b/src/Http/Http.Extensions/gen/StaticRouteHandlerModel/EndpointParameter.cs
index d1a12e428d1d..1e09f813ccb0 100644
--- a/src/Http/Http.Extensions/gen/StaticRouteHandlerModel/EndpointParameter.cs
+++ b/src/Http/Http.Extensions/gen/StaticRouteHandlerModel/EndpointParameter.cs
@@ -122,7 +122,7 @@ private bool TryGetParsability(IParameterSymbol parameter, WellKnownTypes wellKn
// which method was encountered.
Func? preferredTryParseInvocation = parsabilityMethod switch
{
- ParsabilityMethod.IParsable => (string inputArgument, string outputArgument) => $$"""{{parameterType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}}.TryParse({{inputArgument}}!, CultureInfo.InvariantCulture, out var {{outputArgument}})""",
+ ParsabilityMethod.IParsable => (string inputArgument, string outputArgument) => $$"""ParsableHelper<{{parameterType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}}>.TryParse({{inputArgument}}!, CultureInfo.InvariantCulture, out var {{outputArgument}})""",
ParsabilityMethod.TryParseWithFormatProvider => (string inputArgument, string outputArgument) => $$"""{{parameterType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}}.TryParse({{inputArgument}}!, CultureInfo.InvariantCulture, out var {{outputArgument}})""",
ParsabilityMethod.TryParse => (string inputArgument, string outputArgument) => $$"""{{parameterType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}}.TryParse({{inputArgument}}!, out var {{outputArgument}})""",
ParsabilityMethod.Enum => (string inputArgument, string outputArgument) => $$"""Enum.TryParse<{{parameterType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}}>({{inputArgument}}!, out var {{outputArgument}})""",
diff --git a/src/Http/Http.Extensions/src/RequestDelegateFactory.cs b/src/Http/Http.Extensions/src/RequestDelegateFactory.cs
index 9afda2e748bc..ec5487854ae0 100644
--- a/src/Http/Http.Extensions/src/RequestDelegateFactory.cs
+++ b/src/Http/Http.Extensions/src/RequestDelegateFactory.cs
@@ -819,10 +819,10 @@ private static Expression CreateArgument(ParameterInfo parameter, RequestDelegat
return BindParameterFromRouteValueOrQueryString(parameter, parameter.Name, factoryContext);
}
else if (factoryContext.DisableInferredFromBody && (
- (parameter.ParameterType.IsArray && ParameterBindingMethodCache.HasTryParseMethod(parameter.ParameterType.GetElementType()!)) ||
- parameter.ParameterType == typeof(string[]) ||
+ parameter.ParameterType == typeof(string[]) ||
parameter.ParameterType == typeof(StringValues) ||
- parameter.ParameterType == typeof(StringValues?)))
+ parameter.ParameterType == typeof(StringValues?) ||
+ (parameter.ParameterType.IsArray && ParameterBindingMethodCache.HasTryParseMethod(parameter.ParameterType.GetElementType()!))))
{
// We only infer parameter types if you have an array of TryParsables/string[]/StringValues/StringValues?, and DisableInferredFromBody is true
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_BindAsync_Snapshot.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_BindAsync_Snapshot.generated.txt
index 26d1d5942c52..f4236e239ebd 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_BindAsync_Snapshot.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_BindAsync_Snapshot.generated.txt
@@ -1723,4 +1723,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitBodyParam_ComplexReturn_Snapshot.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitBodyParam_ComplexReturn_Snapshot.generated.txt
index 6b55279be2e7..97474020a91f 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitBodyParam_ComplexReturn_Snapshot.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitBodyParam_ComplexReturn_Snapshot.generated.txt
@@ -332,4 +332,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitServiceParam_SimpleReturn_Snapshot.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitServiceParam_SimpleReturn_Snapshot.generated.txt
index e746fcb7b9c5..aabc34afbcbc 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitServiceParam_SimpleReturn_Snapshot.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitServiceParam_SimpleReturn_Snapshot.generated.txt
@@ -410,4 +410,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitSource_SimpleReturn_Snapshot.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitSource_SimpleReturn_Snapshot.generated.txt
index e7cbce34da82..1029bbf6f427 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitSource_SimpleReturn_Snapshot.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitSource_SimpleReturn_Snapshot.generated.txt
@@ -566,4 +566,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleSpecialTypeParam_StringReturn.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleSpecialTypeParam_StringReturn.generated.txt
index 7dc73e294ebc..7289ed870d0b 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleSpecialTypeParam_StringReturn.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleSpecialTypeParam_StringReturn.generated.txt
@@ -256,4 +256,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleStringParam_StringReturn.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleStringParam_StringReturn.generated.txt
index eb12665e119f..2e5991b9f68a 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleStringParam_StringReturn.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_MultipleStringParam_StringReturn.generated.txt
@@ -284,4 +284,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_NoParam_StringReturn_WithFilter.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_NoParam_StringReturn_WithFilter.generated.txt
index a81bd52385e2..4a1b00e81277 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_NoParam_StringReturn_WithFilter.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_NoParam_StringReturn_WithFilter.generated.txt
@@ -250,4 +250,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleComplexTypeParam_StringReturn.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleComplexTypeParam_StringReturn.generated.txt
index 1396cdf01789..4ab22d6c52a0 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleComplexTypeParam_StringReturn.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleComplexTypeParam_StringReturn.generated.txt
@@ -276,4 +276,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleEnumParam_StringReturn.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleEnumParam_StringReturn.generated.txt
index b158ab8c65d2..efefcce5bb3d 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleEnumParam_StringReturn.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleEnumParam_StringReturn.generated.txt
@@ -276,4 +276,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleNullableStringParam_WithEmptyQueryStringValueProvided_StringReturn.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleNullableStringParam_WithEmptyQueryStringValueProvided_StringReturn.generated.txt
index 16e4f40abd61..2bfa1bb69fa7 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleNullableStringParam_WithEmptyQueryStringValueProvided_StringReturn.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleNullableStringParam_WithEmptyQueryStringValueProvided_StringReturn.generated.txt
@@ -260,4 +260,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleTimeOnlyParam_StringReturn.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleTimeOnlyParam_StringReturn.generated.txt
index 28d64a9a57ef..f8e3c65478cd 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleTimeOnlyParam_StringReturn.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_SingleTimeOnlyParam_StringReturn.generated.txt
@@ -126,7 +126,7 @@ namespace Microsoft.AspNetCore.Http.Generated
wasParamCheckFailure = true;
}
var p_temp = (string?)p_raw;
- if (!global::System.TimeOnly.TryParse(p_temp!, CultureInfo.InvariantCulture, out var p_parsed_temp))
+ if (!ParsableHelper.TryParse(p_temp!, CultureInfo.InvariantCulture, out var p_parsed_temp))
{
wasParamCheckFailure = true;
}
@@ -152,7 +152,7 @@ namespace Microsoft.AspNetCore.Http.Generated
wasParamCheckFailure = true;
}
var p_temp = (string?)p_raw;
- if (!global::System.TimeOnly.TryParse(p_temp!, CultureInfo.InvariantCulture, out var p_parsed_temp))
+ if (!ParsableHelper.TryParse(p_temp!, CultureInfo.InvariantCulture, out var p_parsed_temp))
{
wasParamCheckFailure = true;
}
@@ -276,4 +276,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/Multiple_MapAction_NoParam_StringReturn.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/Multiple_MapAction_NoParam_StringReturn.generated.txt
index d4582f7849d1..f743969e8826 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/Multiple_MapAction_NoParam_StringReturn.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/Multiple_MapAction_NoParam_StringReturn.generated.txt
@@ -442,4 +442,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/Multiple_MapAction_WithParams_StringReturn.generated.txt b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/Multiple_MapAction_WithParams_StringReturn.generated.txt
index 3608bfd2f5c5..8bab4f57ece6 100644
--- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/Multiple_MapAction_WithParams_StringReturn.generated.txt
+++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/Multiple_MapAction_WithParams_StringReturn.generated.txt
@@ -402,4 +402,11 @@ namespace Microsoft.AspNetCore.Http.Generated
return T.BindAsync(context, parameter);
}
}
+
+ %GENERATEDCODEATTRIBUTE%
+ file static class ParsableHelper where T : IParsable
+ {
+ public static T Parse(string s, IFormatProvider? provider) => T.Parse(s, provider);
+ public static bool TryParse(string? s, IFormatProvider? provider, [MaybeNullWhen(returnValue: false)] out T result) => T.TryParse(s, provider, out result);
+ }
}
diff --git a/src/Mvc/Mvc.ApiExplorer/src/EndpointMetadataApiDescriptionProvider.cs b/src/Mvc/Mvc.ApiExplorer/src/EndpointMetadataApiDescriptionProvider.cs
index 6f4d479e51ad..8695097020fd 100644
--- a/src/Mvc/Mvc.ApiExplorer/src/EndpointMetadataApiDescriptionProvider.cs
+++ b/src/Mvc/Mvc.ApiExplorer/src/EndpointMetadataApiDescriptionProvider.cs
@@ -307,9 +307,9 @@ private static ParameterDescriptor CreateParameterDescriptor(ParameterInfo param
return (BindingSource.FormFile, parameter.Name ?? string.Empty, false, parameter.ParameterType);
}
else if (disableInferredBody && (
- (parameter.ParameterType.IsArray && ParameterBindingMethodCache.HasTryParseMethod(parameter.ParameterType.GetElementType()!)) ||
parameter.ParameterType == typeof(string[]) ||
- parameter.ParameterType == typeof(StringValues)))
+ parameter.ParameterType == typeof(StringValues) ||
+ (parameter.ParameterType.IsArray && ParameterBindingMethodCache.HasTryParseMethod(parameter.ParameterType.GetElementType()!)) ))
{
return (BindingSource.Query, parameter.Name ?? string.Empty, false, parameter.ParameterType);
}
diff --git a/src/OpenApi/src/OpenApiGenerator.cs b/src/OpenApi/src/OpenApiGenerator.cs
index f9039d6282ed..9a874fd2663d 100644
--- a/src/OpenApi/src/OpenApiGenerator.cs
+++ b/src/OpenApi/src/OpenApiGenerator.cs
@@ -447,9 +447,9 @@ private List GetOpenApiParameters(MethodInfo methodInfo, Route
return (true, null, null);
}
else if (disableInferredBody && (
- (parameter.ParameterType.IsArray && ParameterBindingMethodCache.HasTryParseMethod(parameter.ParameterType.GetElementType()!)) ||
parameter.ParameterType == typeof(string[]) ||
- parameter.ParameterType == typeof(StringValues)))
+ parameter.ParameterType == typeof(StringValues) ||
+ (parameter.ParameterType.IsArray && ParameterBindingMethodCache.HasTryParseMethod(parameter.ParameterType.GetElementType()!))))
{
return (false, ParameterLocation.Query, null);
}