Suppress JsonPatchDocument validation (#6429)

Addresses aspnet/JsonPatch#80
This commit is contained in:
Jass Bagga 2017-06-22 14:14:11 -07:00 committed by GitHub
parent de64c84610
commit 9d138affa2
3 changed files with 22 additions and 0 deletions

View File

@ -3,6 +3,7 @@
using System; using System;
using System.Buffers; using System.Buffers;
using Microsoft.AspNetCore.JsonPatch;
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.ObjectPool; using Microsoft.Extensions.ObjectPool;
@ -80,6 +81,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Json.Internal
options.FormatterMappings.SetMediaTypeMappingForFormat("json", MediaTypeHeaderValue.Parse("application/json")); options.FormatterMappings.SetMediaTypeMappingForFormat("json", MediaTypeHeaderValue.Parse("application/json"));
options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(IJsonPatchDocument)));
options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(JToken))); options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(JToken)));
} }
} }

View File

@ -137,6 +137,20 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
} }
[Fact]
public async Task InvalidOperation_AddsErrorToModelState()
{
// Arrange
var input = "[{ 'op': 'invalid', 'path': 'Reviews/1/Rating', 'from': 'Reviews/0/Rating'}]".Replace("'", "\"");
var request = GetPatchRequest(input);
// Act
var response = await Client.SendAsync(request);
// Assert
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
}
private HttpRequestMessage GetPatchRequest(string body) private HttpRequestMessage GetPatchRequest(string body)
{ {
return new HttpRequestMessage return new HttpRequestMessage

View File

@ -11,6 +11,7 @@ using System.Xml;
using System.Xml.Linq; using System.Xml.Linq;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.JsonPatch;
using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.DataAnnotations.Internal; using Microsoft.AspNetCore.Mvc.DataAnnotations.Internal;
using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.AspNetCore.Mvc.Formatters;
@ -211,6 +212,11 @@ namespace Microsoft.AspNetCore.Mvc
}, },
provider => Assert.IsType<DataAnnotationsMetadataProvider>(provider), provider => Assert.IsType<DataAnnotationsMetadataProvider>(provider),
provider => provider =>
{
var excludeFilter = Assert.IsType<SuppressChildValidationMetadataProvider>(provider);
Assert.Equal(typeof(IJsonPatchDocument), excludeFilter.Type);
},
provider =>
{ {
var excludeFilter = Assert.IsType<SuppressChildValidationMetadataProvider>(provider); var excludeFilter = Assert.IsType<SuppressChildValidationMetadataProvider>(provider);
Assert.Equal(typeof(JToken), excludeFilter.Type); Assert.Equal(typeof(JToken), excludeFilter.Type);