public static void ConfigureFormatter(this TextInputFormatter formatter, Encoding[] encodings)
        {
            if (formatter == null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }
            if (encodings == null)
            {
                throw new ArgumentNullException(nameof(encodings));
            }

            formatter.SupportedMediaTypes.Add(YamlHeadersMediaType.Application);
            formatter.SupportedMediaTypes.Add(YamlHeadersMediaType.Text);

            foreach (var encoding in encodings)
            {
                formatter.SupportedEncodings.Add(encoding);
            }
        }
Example #2
0
 public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
 {
     var mvcOpt= context.HttpContext.RequestServices.GetRequiredService<IOptions<MvcOptions>>().Value;
     var formatters = mvcOpt.InputFormatters;
     TextInputFormatter formatter =null; // the real formatter : SystemTextJsonInput or Newtonsoft
     Endpoint endpoint = context.HttpContext.GetEndpoint();
     if(endpoint.Metadata.GetMetadata<UseSystemTextJsonAttribute>()!= null)
     {
         formatter= formatters.OfType<SystemTextJsonInputFormatter>().FirstOrDefault();
         //formatter = formatter ?? SystemTextJsonInputFormatter
     }
     else if( endpoint.Metadata.GetMetadata<UseNewtonsoftJsonAttribute>() != null){
         // don't use `Of<NewtonsoftJsonInputFormatter>` here because there's a NewtonsoftJsonPatchInputFormatter
         formatter= (NewtonsoftJsonInputFormatter)(formatters
             .Where(f =>typeof(NewtonsoftJsonInputFormatter) == f.GetType())
             .FirstOrDefault());
     }
     else{
         throw new Exception("This formatter is only used for System.Text.Json InputFormatter or NewtonsoftJson InputFormatter");
     }
     var result = await formatter.ReadRequestBodyAsync(context,encoding);
     return result;
 }