|
|
@ -1,4 +1,6 @@
|
|
|
|
using System.Security.Claims;
|
|
|
|
using System.Security.Claims;
|
|
|
|
|
|
|
|
using Asp.Versioning;
|
|
|
|
|
|
|
|
using Asp.Versioning.ApiExplorer;
|
|
|
|
using Infrastructure.Filters;
|
|
|
|
using Infrastructure.Filters;
|
|
|
|
using Infrastructure.HttpUserContext;
|
|
|
|
using Infrastructure.HttpUserContext;
|
|
|
|
using Infrastructure.Options;
|
|
|
|
using Infrastructure.Options;
|
|
|
@ -20,6 +22,12 @@ namespace Infrastructure.Extensions;
|
|
|
|
|
|
|
|
|
|
|
|
public static class ServiceCollectionExtensions
|
|
|
|
public static class ServiceCollectionExtensions
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
public static TOptions? GetOptions<TOptions>(this IConfiguration configuration, string sectionName)
|
|
|
|
|
|
|
|
where TOptions : OptionsBase
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return configuration.GetSection(sectionName).Get<TOptions>();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
/// 配置redis连接服务,以及redis数据访问仓储
|
|
|
|
/// 配置redis连接服务,以及redis数据访问仓储
|
|
|
|
/// </summary>
|
|
|
|
/// </summary>
|
|
|
@ -30,7 +38,7 @@ public static class ServiceCollectionExtensions
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
|
|
ArgumentNullException.ThrowIfNull(configuration);
|
|
|
|
ArgumentNullException.ThrowIfNull(configuration);
|
|
|
|
var redisOptions = configuration.GetSection(RedisOptions.SectionName).Get<RedisOptions>();
|
|
|
|
var redisOptions = configuration.GetOptions<RedisOptions>(RedisOptions.SectionName);
|
|
|
|
if (redisOptions is null || !redisOptions.IsEnable)
|
|
|
|
if (redisOptions is null || !redisOptions.IsEnable)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return services;
|
|
|
|
return services;
|
|
|
@ -73,7 +81,7 @@ public static class ServiceCollectionExtensions
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
|
|
ArgumentNullException.ThrowIfNull(configuration);
|
|
|
|
ArgumentNullException.ThrowIfNull(configuration);
|
|
|
|
var audienceOptions = configuration.GetSection(AudienceOptions.SectionName).Get<AudienceOptions>();
|
|
|
|
var audienceOptions = configuration.GetOptions<AudienceOptions>(AudienceOptions.SectionName);
|
|
|
|
if (audienceOptions is null || !audienceOptions.IsEnable)
|
|
|
|
if (audienceOptions is null || !audienceOptions.IsEnable)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return services;
|
|
|
|
return services;
|
|
|
@ -233,7 +241,7 @@ public static class ServiceCollectionExtensions
|
|
|
|
|
|
|
|
|
|
|
|
ArgumentNullException.ThrowIfNull(configuration);
|
|
|
|
ArgumentNullException.ThrowIfNull(configuration);
|
|
|
|
|
|
|
|
|
|
|
|
var mongoDbOptions = configuration.GetSection(MongoDbOptions.SectionName).Get<MongoDbOptions>();
|
|
|
|
var mongoDbOptions = configuration.GetOptions<MongoDbOptions>(MongoDbOptions.SectionName);
|
|
|
|
if (mongoDbOptions is null || !mongoDbOptions.IsEnable)
|
|
|
|
if (mongoDbOptions is null || !mongoDbOptions.IsEnable)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return services;
|
|
|
|
return services;
|
|
|
@ -277,7 +285,7 @@ public static class ServiceCollectionExtensions
|
|
|
|
|
|
|
|
|
|
|
|
ArgumentNullException.ThrowIfNull(hostEnvironment);
|
|
|
|
ArgumentNullException.ThrowIfNull(hostEnvironment);
|
|
|
|
|
|
|
|
|
|
|
|
var sqlSugarOptions = configuration.GetSection(SqlSugarOptions.SectionName).Get<SqlSugarOptions>();
|
|
|
|
var sqlSugarOptions = configuration.GetOptions<SqlSugarOptions>(SqlSugarOptions.SectionName);
|
|
|
|
if (sqlSugarOptions is null || !sqlSugarOptions.IsEnable)
|
|
|
|
if (sqlSugarOptions is null || !sqlSugarOptions.IsEnable)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return services;
|
|
|
|
return services;
|
|
|
@ -369,7 +377,7 @@ public static class ServiceCollectionExtensions
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
|
|
|
|
|
|
|
|
|
|
var corsOptions = configuration.GetSection(CorsOptions.SectionName).Get<CorsOptions>();
|
|
|
|
var corsOptions = configuration.GetOptions<CorsOptions>(CorsOptions.SectionName);
|
|
|
|
if (corsOptions is null || !corsOptions.IsEnable)
|
|
|
|
if (corsOptions is null || !corsOptions.IsEnable)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return services;
|
|
|
|
return services;
|
|
|
@ -411,4 +419,48 @@ public static class ServiceCollectionExtensions
|
|
|
|
});
|
|
|
|
});
|
|
|
|
return services;
|
|
|
|
return services;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// 配置api版本
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
/// <param name="services"></param>
|
|
|
|
|
|
|
|
/// <param name="configuration"></param>
|
|
|
|
|
|
|
|
/// <param name="configureApiVersioningBuilder"></param>
|
|
|
|
|
|
|
|
/// <param name="configureApiVersioningOptions"></param>
|
|
|
|
|
|
|
|
/// <param name="configureApiExplorerOptions"></param>
|
|
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
|
|
public static IServiceCollection AddDefaultApiVersioning(this IServiceCollection services,
|
|
|
|
|
|
|
|
IConfiguration configuration,
|
|
|
|
|
|
|
|
Action<IApiVersioningBuilder>? configureApiVersioningBuilder = null,
|
|
|
|
|
|
|
|
Action<ApiVersioningOptions>? configureApiVersioningOptions = null,
|
|
|
|
|
|
|
|
Action<ApiExplorerOptions>? configureApiExplorerOptions = null)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
|
|
|
|
|
|
ArgumentNullException.ThrowIfNull(configuration);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var versionOptions = configuration.GetOptions<VersionOptions>(VersionOptions.SectionName);
|
|
|
|
|
|
|
|
if (versionOptions is null || !versionOptions.IsEnable)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return services;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = services.AddApiVersioning(options =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
options.DefaultApiVersion = new ApiVersion(1, 0);
|
|
|
|
|
|
|
|
options.AssumeDefaultVersionWhenUnspecified = true;
|
|
|
|
|
|
|
|
options.ReportApiVersions = true;
|
|
|
|
|
|
|
|
options.ApiVersionReader = ApiVersionReader.Combine(new UrlSegmentApiVersionReader(),
|
|
|
|
|
|
|
|
new HeaderApiVersionReader(versionOptions!.HeaderName),
|
|
|
|
|
|
|
|
new MediaTypeApiVersionReader(versionOptions!.ParameterName));
|
|
|
|
|
|
|
|
configureApiVersioningOptions?.Invoke(options);
|
|
|
|
|
|
|
|
}).AddApiExplorer(builder =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
builder.GroupNameFormat = "'v'VVV";
|
|
|
|
|
|
|
|
builder.SubstituteApiVersionInUrl = true;
|
|
|
|
|
|
|
|
configureApiExplorerOptions?.Invoke(builder);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
configureApiVersioningBuilder?.Invoke(builder);
|
|
|
|
|
|
|
|
services.ConfigureOptions<ConfigureSwaggerOptions>();
|
|
|
|
|
|
|
|
return services;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|