// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Buffers; using Microsoft.AspNet.Mvc.ModelBinding.Validation; using Microsoft.Extensions.Logging; using Microsoft.Extensions.ObjectPool; using Microsoft.Extensions.Options; using Microsoft.Net.Http.Headers; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Microsoft.AspNet.Mvc.Formatters.Json.Internal { /// /// Sets up JSON formatter options for . /// public class MvcJsonMvcOptionsSetup : ConfigureOptions { /// /// Intiailizes a new instance of . /// /// The . /// /// /// public MvcJsonMvcOptionsSetup( ILoggerFactory loggerFactory, IOptions jsonOptions, ArrayPool charPool, ObjectPoolProvider objectPoolProvider) : base((options) => ConfigureMvc( options, jsonOptions.Value.SerializerSettings, loggerFactory, charPool, objectPoolProvider)) { } public static void ConfigureMvc( MvcOptions options, JsonSerializerSettings serializerSettings, ILoggerFactory loggerFactory, ArrayPool charPool, ObjectPoolProvider objectPoolProvider) { options.OutputFormatters.Add(new JsonOutputFormatter(serializerSettings, charPool)); var jsonInputLogger = loggerFactory.CreateLogger(); options.InputFormatters.Add(new JsonInputFormatter( jsonInputLogger, serializerSettings, charPool, objectPoolProvider)); var jsonInputPatchLogger = loggerFactory.CreateLogger(); options.InputFormatters.Add(new JsonPatchInputFormatter( jsonInputPatchLogger, serializerSettings, charPool, objectPoolProvider)); options.FormatterMappings.SetMediaTypeMappingForFormat("json", MediaTypeHeaderValue.Parse("application/json")); options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(JToken))); } } }