Skip to content

Commit f1590bf

Browse files
Fix null property name handling logic in SystemTextJsonValidationMetadataProvider (#47775)
* Fix https://github.com/dotnet/runtime/issues/84830 Fixing what appears to be a negation bug causing null names to be passed to the underlying `JsonNamingPolicy`. * Update src/Mvc/Mvc.Core/src/ModelBinding/Metadata/SystemTextJsonValidationMetadataProvider.cs * Update SystemTextJsonValidationMetadataProvider.cs * Update SystemTextJsonValidationMetadataProvider.cs * Update src/Mvc/Mvc.Core/src/ModelBinding/Metadata/SystemTextJsonValidationMetadataProvider.cs Co-authored-by: Safia Abdalla <safia@microsoft.com> * Add test for null value passed to JsonNamingPolicy --------- Co-authored-by: Safia Abdalla <safia@microsoft.com> Co-authored-by: Safia Abdalla <safia@safia.rocks>
1 parent 7a3f304 commit f1590bf

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/Mvc/Mvc.Core/src/ModelBinding/Metadata/SystemTextJsonValidationMetadataProvider.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ public void CreateValidationMetadata(ValidationMetadataProviderContext context)
5757

5858
if (string.IsNullOrEmpty(propertyName))
5959
{
60-
propertyName = _jsonNamingPolicy.ConvertName(context.Key.Name!);
60+
propertyName = context.Key.Name is string contextKeyName
61+
? _jsonNamingPolicy.ConvertName(contextKeyName)
62+
: null;
6163
}
6264

6365
context.ValidationMetadata.ValidationModelName = propertyName;

src/Mvc/Mvc.Core/test/ModelBinding/Metadata/SystemTextJsonValidationMetadataProviderTest.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,22 @@ public void CreateValidationMetadata_SetValidationPropertyName_CamelCaseWithDefa
4444
Assert.Equal(JsonNamingPolicy.CamelCase.ConvertName(propertyName), context.ValidationMetadata.ValidationModelName);
4545
}
4646

47+
[Fact]
48+
// Test for https://github.com/dotnet/aspnetcore/issues/47835
49+
public void CreateValidationMetadata_SetValidationPropertyName_WithNullKeyName()
50+
{
51+
var metadataProvider = new SystemTextJsonValidationMetadataProvider(JsonNamingPolicy.SnakeCaseLower);
52+
var key = ModelMetadataIdentity.ForType(typeof(SampleTestClass));
53+
var modelAttributes = new ModelAttributes(Array.Empty<object>(), Array.Empty<object>(), Array.Empty<object>());
54+
var context = new ValidationMetadataProviderContext(key, modelAttributes);
55+
56+
// Act
57+
metadataProvider.CreateValidationMetadata(context);
58+
59+
// Assert
60+
Assert.Null(context.ValidationMetadata.ValidationModelName);
61+
}
62+
4763
[Theory]
4864
[MemberData(nameof(NamingPolicies))]
4965
public void CreateValidationMetadata_SetValidationPropertyName_WithJsonNamingPolicy(JsonNamingPolicy namingPolicy)

0 commit comments

Comments
 (0)