iotgateway/WalkingTec.Mvvm/WalkingTec.Mvvm.Mvc/Helper/MvcOptionExtension.cs

86 lines
5.0 KiB
C#
Raw Permalink Normal View History

2021-12-14 06:10:44 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Localization;
using WalkingTec.Mvvm.Core;
using WalkingTec.Mvvm.Core.Json;
using WalkingTec.Mvvm.Mvc.Binders;
using WalkingTec.Mvvm.Mvc.Filters;
namespace WalkingTec.Mvvm.Mvc
{
public static class MvcOptionExtension
{
public static void UseWtmMvcOptions(this MvcOptions options)
{
// ModelBinderProviders
options.ModelBinderProviders.Insert(0, new StringBinderProvider());
// Filters
options.Filters.Add(new DataContextFilter());
options.Filters.Add(new PrivilegeFilter());
options.Filters.Add(new FrameworkFilter());
options.ModelBindingMessageProvider.SetValueIsInvalidAccessor((x) => Core.CoreProgram._localizer?["Sys.ValueIsInvalidAccessor", x]);
options.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor((x, y) => Core.CoreProgram._localizer?["Sys.AttemptedValueIsInvalidAccessor", x, y]);
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor((x) => Core.CoreProgram._localizer?["Sys.ValueIsInvalidAccessor", x]);
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(IModelStateService)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(IDataContext)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(WTMContext)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(Configs)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(GlobalData)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(IDistributedCache)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(LoginUserInfo)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(ISessionService)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(IModelStateService)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(IUIService)));
options.ModelMetadataDetailsProviders.Add(new ExcludeBindingMetadataProvider(typeof(IStringLocalizer)));
options.EnableEndpointRouting = true;
}
public static void UseWtmJsonOptions(this JsonOptions options)
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
2022-01-24 15:10:56 +00:00
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
2021-12-14 06:10:44 +00:00
options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString;
options.JsonSerializerOptions.AllowTrailingCommas = true;
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
options.JsonSerializerOptions.Converters.Add(new StringIgnoreLTGTConverter());
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
options.JsonSerializerOptions.Converters.Add(new BoolStringConverter());
options.JsonSerializerOptions.Converters.Add(new DateRangeConverter());
options.JsonSerializerOptions.Converters.Add(new PocoConverter());
options.JsonSerializerOptions.Converters.Add(new TypeConverter());
options.JsonSerializerOptions.Converters.Add(new DynamicDataConverter());
Core.CoreProgram.DefaultJsonOption = options.JsonSerializerOptions;
JsonSerializerOptions jsonOptions2 = new JsonSerializerOptions();
jsonOptions2.PropertyNamingPolicy = null;
jsonOptions2.NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString;
jsonOptions2.AllowTrailingCommas = true;
jsonOptions2.Converters.Add(new DateTimeConverter());
jsonOptions2.Converters.Add(new JsonStringEnumConverter());
jsonOptions2.Converters.Add(new BoolStringConverter());
jsonOptions2.Converters.Add(new DateRangeConverter());
jsonOptions2.Converters.Add(new PocoConverter());
jsonOptions2.Converters.Add(new TypeConverter());
jsonOptions2.Converters.Add(new DynamicDataConverter());
CoreProgram.DefaultPostJsonOption = jsonOptions2;
}
public static void UseWtmApiOptions(this ApiBehaviorOptions options)
{
options.SuppressModelStateInvalidFilter = true;
options.InvalidModelStateResponseFactory = (a) =>
{
return new BadRequestObjectResult(a.ModelState.GetErrorJson());
};
}
}
}