예제 #1
0
        public static IMvcBuilder AppendJsonSettings(this IMvcBuilder mvcBuilder
#if !NETCOREAPP3_1 && !NET5_0
                                                     , Action <MvcJsonOptions>?mvcJsonOption = null
#else
                                                     , Action <JsonOptions>?jsonOptions = null, Action <MvcNewtonsoftJsonOptions>?mvcJsonOptions = null
#endif
                                                     )
        {
#if NETCOREAPP3_1 || NET5_0
            return(mvcBuilder.AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
                options.JsonSerializerOptions.PropertyNamingPolicy = null;
                jsonOptions?.Invoke(options);
            }).AddNewtonsoftJson(options =>
            {
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                mvcJsonOptions?.Invoke(options);
            }));
#else
            return(mvcBuilder.AddJsonOptions(options =>
            {
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                mvcJsonOption?.Invoke(options);
            }));
#endif
        }
예제 #2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            IMvcBuilder mvcBuilder = services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

#if DEBUG
            mvcBuilder.AddJsonOptions(options => { options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; });
#endif
            services.AddSwaggerGen(c =>
            {
                c.DescribeAllEnumsAsStrings();
                c.SwaggerDoc("v1", new Info     //OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "ExerceoBitcamp2019",
                    Description = "This is our hackathon project.",
                    Contact     = new Contact //OpenApiContact
                    {
                        Name  = "ExerceoBitGroup",
                        Email = string.Empty,
                        Url   = ""        //new Uri("https://google.com")
                    },
                    License = new License //OpenApiLicense
                    {
                        Name = "Use under Apache",
                        Url  = ""   //new Uri("https://google.com")
                    }
                });
                //var xmlFile = $"{Assembly.GetExecut ingAssembly().GetName().Name}.xml";
                //var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                //c.IncludeXmlComments(xmlPath);
            });
        }
예제 #3
0
        public static IMvcBuilder AddNaos(
            this IMvcBuilder mvcBuilder,
            Action <NaosMvcOptions> optionsAction = null)
        {
            var options = new NaosMvcOptions();

            optionsAction?.Invoke(options);

            if (!options.ControllerRegistrations.IsNullOrEmpty())
            {
                mvcBuilder
                .AddMvcOptions(o =>
                {
                    o.Filters.Add <OperationCancelledExceptionFilter>();
                    o.Conventions.Add(new GeneratedControllerRouteConvention());
                })
                .ConfigureApplicationPartManager(o => o
                                                 .FeatureProviders.Add(
                                                     new GeneratedRepositoryControllerFeatureProvider(options.ControllerRegistrations)));
            }

            mvcBuilder.AddControllersAsServices(); // needed to resolve controllers through di https://andrewlock.net/controller-activation-and-dependency-injection-in-asp-net-core-mvc/
            mvcBuilder.AddJsonOptions(o => o.AddDefaultJsonSerializerSettings(options.JsonSerializerSettings));

            return(mvcBuilder);
        }
 public static IMvcBuilder AddFuzzySerializer(this IMvcBuilder mvcBuilder)
 {
     return(mvcBuilder.AddJsonOptions(opt =>
     {
         opt.SerializerSettings.ContractResolver = new FuzzyObjectContractResolver();
     }));
 }
예제 #5
0
 private void IndentJsonForDevelopment(IMvcBuilder mvc)
 {
     if (Env.IsDevelopment())
     {
         mvc.AddJsonOptions(jsonFormat => jsonFormat.SerializerSettings.Formatting = Formatting.Indented);
     }
 }
예제 #6
0
 public static void AddDataContractResolver(this IMvcBuilder builder)
 {
     builder.AddJsonOptions(opts =>
     {
         opts.SerializerSettings.ContractResolver = new SensitiveDataContractResolver();
     });
 }
        /// <summary>
        ///     Adds customized JSON serializer settings.
        /// </summary>
        public static IMvcBuilder AddCustomJsonOptions(
            this IMvcBuilder builder,
            IWebHostEnvironment webHostEnvironment)
        {
            return(builder.AddJsonOptions(
                       options =>
            {
                var jsonSerializerOptions = options.JsonSerializerOptions;
                if (webHostEnvironment.IsDevelopment())
                {
                    // Pretty print the JSON in development for easier debugging.
                    jsonSerializerOptions.WriteIndented = true;
                }

                jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
                // changes response to be Pascal case rather than Camel Case
                jsonSerializerOptions.DictionaryKeyPolicy = null;
                jsonSerializerOptions.PropertyNamingPolicy = null;

                // Parse dates as DateTimeOffset values by default. You should prefer using DateTimeOffset over
                // DateTime everywhere. Not doing so can cause problems with time-zones.
                //  jsonSerializerOptions.SerializerSettings.DateParseHandling = DateParseHandling.DateTimeOffset;

                // removes null collections and objects
                jsonSerializerOptions.IgnoreNullValues = true;

                //omits empty collections
            }));
        }
예제 #8
0
 /// <summary>
 /// Format json response data.
 /// See https://docs.microsoft.com/es-es/aspnet/core/web-api/advanced/formatting
 /// </summary>
 /// <param name="builder"></param>
 /// <returns></returns>
 public static IMvcBuilder AddCustomJsonOptions(this IMvcBuilder builder) =>
 builder.AddJsonOptions(options =>
 {
     // Use the default property (Pascal) casing.
     options.JsonSerializerOptions.PropertyNamingPolicy = null;
     options.JsonSerializerOptions.IgnoreNullValues     = true;
 });
        public static IMvcBuilder ConfigureTextJson(this IMvcBuilder builder, JsonOptions options, ICustomMediaTypeService customMediaTypeService)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            return(builder.AddJsonOptions(o =>
            {
                o.JsonSerializerOptions.AllowTrailingCommas = options.BeTolerant;
                o.JsonSerializerOptions.PropertyNameCaseInsensitive = options.BeTolerant;
                if (options.BeTolerant)
                {
                    o.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip;
                }
                o.JsonSerializerOptions.IgnoreNullValues = options.IgnoreNullValue;
                o.JsonSerializerOptions.PropertyNamingPolicy = options.UseCamelCase ? JsonNamingPolicy.CamelCase : null;
                if (options.EnumAsString)
                {
                    o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
                }
            }).AddMvcOptions(o =>
            {
                o.AddCustomInputFormatters();
                o.AddCustomOutputFormatters <SystemTextJsonOutputFormatter>(customMediaTypeService);
            }));
        }
        /// <summary>
        /// Configures the input and output formatters.
        /// </summary>
        private static void ConfigureFormatters(IMvcBuilder mvcBuilder)
        {
            // The JSON input and output formatters are added to MVC by default.
            // $Start-JsonSerializerSettings$

            // Configures the JSON output formatter to use camel case property names like 'propertyName' instead of 
            // pascal case 'PropertyName' as this is the more common JavaScript/JSON style.
            mvcBuilder.AddJsonOptions(
                x => x.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());
            // $End-JsonSerializerSettings$
            // $Start-BsonFormatter$

            // Adds the BSON input and output formatters using the JSON.NET serializer.
            mvcBuilder.AddBsonSerializerFormatters();
            // $End-BsonFormatter$
            // $Start-XmlFormatter-DataContractSerializer$

            // Adds the XML input and output formatter using the DataContractSerializer.
            mvcBuilder.AddXmlDataContractSerializerFormatters();
            // $End-XmlFormatter-DataContractSerializer$
            // $Start-XmlFormatter-XmlSerializer$

            // Adds the XML input and output formatter using the XmlSerializer.
            mvcBuilder.AddXmlSerializerFormatters();
            // $End-XmlFormatter-XmlSerializer$
        }
예제 #11
0
        public static IMvcBuilder AddCrazyPriceValidation(this IMvcBuilder mvcBuilder)
        {
            mvcBuilder.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining <SearchCriteriaValidator>());
            mvcBuilder.AddJsonOptions(opts =>
            {
                opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
                opts.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
            });

            mvcBuilder.Services.Configure <ApiBehaviorOptions>(options =>
            {
                options.InvalidModelStateResponseFactory = context =>
                {
                    var(key, value) =
                        context.ModelState.First(e => e.Value.ValidationState == ModelValidationState.Invalid);

                    var error = value.Errors[0].ErrorMessage;

                    #region ForPrimitiveType
                    // Needed if the controller gets a primitive type like string or int etc.
                    if (error.Contains("''"))
                    {
                        error = error.Replace("''", $"'{key}'");
                    }
                    #endregion

                    return(new BadRequestObjectResult(error));
                };
            });

            return(mvcBuilder);
        }
 /// <summary>
 /// Configures the input and output formatters.
 /// </summary>
 private static void ConfigureFormatters(IMvcBuilder mvcBuilder)
 {
     // Configures the JSON output formatter to use camel case property names like 'propertyName' instead of 
     // pascal case 'PropertyName' as this is the more common JavaScript/JSON style.
     mvcBuilder.AddJsonOptions(
         x => x.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());
 }
 private static IMvcBuilder AddJsonSerializerOptions(this IMvcBuilder mvcBuilder)
 => mvcBuilder.AddJsonOptions(opt =>
 {
     opt.JsonSerializerOptions.DictionaryKeyPolicy  = JsonNamingPolicy.CamelCase;
     opt.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
     opt.JsonSerializerOptions.IgnoreNullValues     = false;
 });
예제 #14
0
        /// <summary>
        /// Sets up some common, default JsonSerializerOptions settings:<br/>
        /// - CamelCase property names.
        /// - Indented formatting.
        /// - Ignore null properties which have values.
        /// - Enums are rendered as string's ... not their backing number-value.
        /// </summary>
        /// <param name="builder"Mvc builder to help create the Mvc settings.></param>
        /// <returns>IMvcBuilder: the builder, so we can more builder methods.</returns>
        public static IMvcBuilder AddDefaultJsonOptions(this IMvcBuilder builder,
                                                        bool isIndented       = false,
                                                        string?dateTimeFormat = null,
                                                        IEnumerable <JsonConverter>?converters = null)
        {
            return(builder.AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
                options.JsonSerializerOptions.WriteIndented = isIndented;
                options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
                options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase));

                // If we have specified a custom date-time format, then use the specific custom converter.
                if (!string.IsNullOrWhiteSpace(dateTimeFormat))
                {
                    options.JsonSerializerOptions.Converters.Add(new DateTimeConverter(dateTimeFormat));
                }

                if (converters?.Any() == true)
                {
                    foreach (var converter in converters)
                    {
                        options.JsonSerializerOptions.Converters.Add(converter);
                    }
                }
            }));
        }
예제 #15
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            IMvcBuilder mvcBuilder = services.AddMvc();

            services.AddCors();
            mvcBuilder.AddJsonOptions
                (opts => opts.SerializerSettings.ContractResolver =
                    new CamelCasePropertyNamesContractResolver());

            services.AddOptions();

            //Configuration Pocos
            services.Configure <ApplicationSettings>(Configuration.GetSection("ApplicationSettings"));
            services.Configure <EmailSettings>(Configuration.GetSection("EmailSettings"));
            services.Configure <LogSettings>(Configuration.GetSection("LogSettings"));

            //Add custom services
            services.AddTransient <IEmailService, EmailService>();
            services.AddSingleton <IFileService, FileService>();
            services.AddLogging();

            // In production, the Angular files will be served from this directory
            services.AddSpaStaticFiles(configuration => { configuration.RootPath = "ClientApp/dist"; });
        }
예제 #16
0
        /// <summary>
        ///     Configures the input and output formatters.
        /// </summary>
        private static void ConfigureFormatters(IMvcBuilder mvcBuilder)
        {
            // The JSON input and output formatters are added to MVC by default.
            // $Start-JsonSerializerSettings$

            // Configures the JSON output formatter to use camel case property names like 'propertyName' instead of
            // pascal case 'PropertyName' as this is the more common JavaScript/JSON style.
            mvcBuilder.AddJsonOptions(
                x => x.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());

            // $End-JsonSerializerSettings$
            // $Start-BsonFormatter$

            // $End-BsonFormatter$
            // $Start-XmlFormatter-DataContractSerializer$

            // Adds the XML input and output formatter using the DataContractSerializer.
            mvcBuilder.AddXmlDataContractSerializerFormatters();

            // $End-XmlFormatter-DataContractSerializer$
            // $Start-XmlFormatter-XmlSerializer$

            // Adds the XML input and output formatter using the XmlSerializer.
            mvcBuilder.AddXmlSerializerFormatters();

            // $End-XmlFormatter-XmlSerializer$
        }
예제 #17
0
        public static IMvcBuilder AddDelve(this IMvcBuilder mvcBuilder, Action <DelveOptions> options = null)
        {
            var option = new DelveOptions();

            options?.Invoke(option);
            ResourceParameterOptions.ApplyConfig(option);

            //Adds UrlHelper services to mvc app
            mvcBuilder.Services.AddSingleton <IActionContextAccessor, ActionContextAccessor>();
            mvcBuilder.Services.AddScoped <IUrlHelper, UrlHelper>(factory =>
                                                                  new UrlHelper(factory.GetService <IActionContextAccessor>().ActionContext));

            //Adds IResourceParameter<T> ModelBinding and ModelState validator
            mvcBuilder.AddMvcOptions(opt =>
            {
                opt.ModelBinderProviders.Insert(0, new ResourceParamBinderProvider());
                opt.Filters.Add(new ModelStateValidator());
            });

            //Ignores CiruclarReference checking in json.net
            mvcBuilder.AddJsonOptions(opt => {
                opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            });

            return(mvcBuilder);
        }
예제 #18
0
        public static IMvcBuilder AddMetaflow(this IMvcBuilder builder,
                                              ICollection <Type> resourceTypes)
        {
            builder
            .AddJsonOptions(options => options.JsonSerializerOptions.Configure())
            .ConfigureApplicationPartManager(apm =>
            {
                apm.FeatureProviders.Add(new GrainControllerFeatureProvider(resourceTypes));
            });

            builder.AddJsonOptions(o =>
            {
                o.JsonSerializerOptions.AddMaybeConverter();
            });

            return(builder);
        }
예제 #19
0
 /// <summary>
 /// add Json default serializations settings
 /// </summary>
 /// <param name="mvcBuilder"></param>
 public static void AddJsonDefaultOptions(this IMvcBuilder mvcBuilder)
 {
     mvcBuilder.AddJsonOptions(options =>
     {
         options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
         options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
     });
 }
 public static void Configure(IMvcBuilder mvcBuilder)
 {
     mvcBuilder.AddJsonOptions(options =>
     {
         options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
         options.SerializerSettings.Formatting       = Formatting.Indented;
     });
 }
예제 #21
0
 public static IMvcBuilder AddJsonOptions(this IMvcBuilder builder)
 {
     return(builder.AddJsonOptions(opt =>
     {
         opt.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
         opt.JsonSerializerOptions.IgnoreNullValues = true;
     }));
 }
예제 #22
0
 /// <summary>
 /// Use a preffered json format setting(eg: format date at yyyy-MM-dd HH:mm:ss & ignore loop reference & so on)
 /// </summary>
 /// <param name="builder"></param>
 /// <returns></returns>
 public static IMvcBuilder UsePrefferedJsonSettings(this IMvcBuilder builder)
 {
     builder.AddJsonOptions(jsonOptions =>
     {
         jsonOptions.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
     });
     return(builder);
 }
예제 #23
0
        /// <summary>
        /// Configures the input and output formatters.
        /// </summary>
        private static void ConfigureFormatters(IMvcBuilder mvcBuilder)
        {
            // The JSON input and output formatters are added to MVC by default.

            // Configures the JSON output formatter to use camel case property names like 'propertyName' instead of
            // pascal case 'PropertyName' as this is the more common JavaScript/JSON style.
            mvcBuilder.AddJsonOptions(x => x.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());
        }
예제 #24
0
 /// <summary>
 /// Setups the json options.
 /// </summary>
 /// <param name="mvcBuilder">The MVC builder.</param>
 public static void SetupJsonOptions(this IMvcBuilder mvcBuilder)
 {
     mvcBuilder.AddJsonOptions(options =>
     {
         options.SerializerSettings.Converters.Add(new StringEnumConverter());
         options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
     });
 }
예제 #25
0
        /// <summary>
        /// 注册MVC服务
        /// </summary>
        /// <param name="services"></param>
        private void AddGobalMvc(IServiceCollection services)
        {
            IMvcBuilder mvcBuilder = services.AddMvc();
            //Csv
            var csvFormatterOptions = new CsvFormatterOptions();

            mvcBuilder.AddMvcOptions(options =>
            {
                options.Filters.AddService(typeof(HandlerExceptionFilter));
                options.InputFormatters.Add(new CsvInputFormatter(csvFormatterOptions));
                options.OutputFormatters.Add(new CsvOutputFormatter(csvFormatterOptions));
                options.FormatterMappings.SetMediaTypeMappingForFormat("csv", MediaTypeHeaderValue.Parse("text/csv"));

                options.RespectBrowserAcceptHeader = true;
                options.InputFormatters.Add(new XmlSerializerInputFormatter());
                options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
            });
            // Force Camel Case to JSON
            mvcBuilder.AddJsonOptions(opts =>
            {
                opts.SerializerSettings.ContractResolver     = new BaseContractResolver();
                opts.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
                opts.SerializerSettings.NullValueHandling    = NullValueHandling.Ignore;
                opts.SerializerSettings.Converters.Add(new TimeSpanConverter());
                opts.SerializerSettings.Converters.Add(new GuidConverter());
                opts.SerializerSettings.Formatting = Formatting.None;
            });
            //foreach (var module in ExtensionManager.Modules)
            //    // Register controller from modules
            //    mvcBuilder.AddApplicationPart(module.Assembly);

            mvcBuilder.AddRazorOptions(
                o =>
            {
                foreach (Assembly assembly in ExtensionManager.Assemblies)
                {
                    o.FileProviders.Add(new EmbeddedFileProvider(assembly, assembly.GetName().Name));
                }
                foreach (var module in ExtensionManager.Modules)
                {
                    o.AdditionalCompilationReferences.Add(MetadataReference.CreateFromFile(module.Assembly.Location));
                }
            }
                ).AddViewLocalization()
            .AddDataAnnotationsLocalization();

            foreach (Action <IMvcBuilder> prioritizedAddMvcAction in GetPrioritizedAddMvcActions())
            {
                this.logger.LogInformation("Executing prioritized AddMvc action '{0}' of {1}", GetActionMethodInfo(prioritizedAddMvcAction));
                prioritizedAddMvcAction(mvcBuilder);
            }

            //注册模块FluentValidation验证
            foreach (ModuleInfo moduleInfo in ExtensionManager.Modules)
            {
                mvcBuilder.AddFluentValidation(fv => fv.RegisterValidatorsFromAssembly(moduleInfo.Assembly));
            }
        }
예제 #26
0
        /// <summary>
        /// Configurações de serialização json
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IMvcBuilder AddCustomJsonOptions(this IMvcBuilder builder)
        {
            builder.AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
            });

            return(builder);
        }
        public static IMvcBuilder AddJsonConfiguration(this IMvcBuilder builder)
        {
            builder.AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
            });

            return(builder);
        }
예제 #28
0
 public static void ConfigureJsonSerializerSettings(this IMvcBuilder mvcBuilder)
 {
     mvcBuilder
     .AddJsonOptions(opt =>
     {
         opt.SerializerSettings.NullValueHandling    = Newtonsoft.Json.NullValueHandling.Ignore;
         opt.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
     });
 }
예제 #29
0
 /// <summary>
 /// configuration of JSON response
 /// </summary>
 /// <param name="mvcBuilder"></param>
 public static IMvcBuilder ConfigureJsonResponse(this IMvcBuilder mvcBuilder)
 {
     mvcBuilder.AddJsonOptions(options =>
     {
         options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
         options.SerializerSettings.ContractResolver      = new CamelCasePropertyNamesContractResolver();
     });
     return(mvcBuilder);
 }
예제 #30
0
 public virtual void MvcJsonOptions(IMvcBuilder mvcBuilder)
 {
     _mvcBuilder
     .AddJsonOptions(options =>
     {
         options.SerializerSettings.NullValueHandling     = Newtonsoft.Json.NullValueHandling.Ignore;
         options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
     });
 }
예제 #31
0
        public static IMvcBuilder AddMySerializers(this IMvcBuilder mvc)
        {
            mvc.AddJsonOptions(options =>
            {
                ConfigureJson(options.SerializerSettings, TypeNameHandling.None);
            });

            return(mvc);
        }
예제 #32
0
 public static IMvcBuilder AddDxSampleModelJsonOptions(this IMvcBuilder builder, Action <JsonResolver> setupAction = null)
 {
     return(builder.AddJsonOptions(opt => {
         var resolver = new JsonResolver();
         opt.SerializerSettings.ContractResolver = resolver;
         opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
         setupAction?.Invoke(resolver);
     }));
 }