enhance configure controllers

master
Young 7 months ago
parent 611bf8fd00
commit 4cae00bd86

@ -13,32 +13,36 @@ public static class ControllerSetup
/// 配置controller包含过滤器、json序列化以及模型验证等配置
/// </summary>
/// <param name="services"></param>
/// <param name="configureControllers"></param>
/// <returns></returns>
public static IServiceCollection AddDefaultControllers(this IServiceCollection services)
public static IServiceCollection AddDefaultControllers(this IServiceCollection services,
Action<IMvcBuilder>? configureControllers = null)
{
ArgumentNullException.ThrowIfNull(services);
services.AddControllers(options =>
{
options.Filters.Add<ExceptionsFilter>();
options.Filters.Add<IdempotencyFilter>();
})
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
options.SerializerSettings.Converters.Add(new StringEnumConverter());
})
.ConfigureApiBehaviorOptions(options =>
var mvcBuilder = services.AddControllers(options =>
{
options.Filters.Add<ExceptionsFilter>();
options.Filters.Add<IdempotencyFilter>();
});
mvcBuilder.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
options.SerializerSettings.Converters.Add(new StringEnumConverter());
});
mvcBuilder.ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = _ =>
{
options.InvalidModelStateResponseFactory = _ =>
{
var message = new MessageData(false, "the input value not valid", 400);
return new OkObjectResult(message.Serialize());
};
});
var message = new MessageData(false, "the input value not valid", 400);
return new OkObjectResult(message.Serialize());
};
});
configureControllers?.Invoke(mvcBuilder);
return services;
}
}
Loading…
Cancel
Save