optimise extensions

master
Young 7 months ago
parent 85985252af
commit ebb8d30789

@ -14,11 +14,15 @@ public static class AuthenticationSetup
/// <param name="services"></param> /// <param name="services"></param>
/// <param name="configuration"></param> /// <param name="configuration"></param>
/// <param name="builderOptions">自定义认证服务配置</param> /// <param name="builderOptions">自定义认证服务配置</param>
/// <param name="configureAuthenticationOptions">配置认证选项</param>
/// <param name="configureJwtBearerOptions">配置jwt认证选项</param>
/// <returns></returns> /// <returns></returns>
public static IServiceCollection AddDefaultAuthentication( public static IServiceCollection AddDefaultAuthentication(
this IServiceCollection services, this IServiceCollection services,
IConfiguration configuration, IConfiguration configuration,
Action<AuthenticationBuilder>? builderOptions = null) Action<AuthenticationBuilder>? builderOptions = null,
Action<AuthenticationOptions>? configureAuthenticationOptions = null,
Action<JwtBearerOptions>? configureJwtBearerOptions = null)
{ {
ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configuration); ArgumentNullException.ThrowIfNull(configuration);
@ -55,11 +59,16 @@ public static class AuthenticationSetup
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = nameof(DefaultAuthenticationHandler); options.DefaultChallengeScheme = nameof(DefaultAuthenticationHandler);
options.DefaultForbidScheme = nameof(DefaultAuthenticationHandler); options.DefaultForbidScheme = nameof(DefaultAuthenticationHandler);
configureAuthenticationOptions?.Invoke(options);
}); });
builder.AddScheme<AuthenticationSchemeOptions, DefaultAuthenticationHandler>( builder.AddScheme<AuthenticationSchemeOptions, DefaultAuthenticationHandler>(
nameof(DefaultAuthenticationHandler), nameof(DefaultAuthenticationHandler),
options => { }); options => { });
builder.AddJwtBearer(options => { options.TokenValidationParameters = tokenValidationParameters; }); builder.AddJwtBearer(options =>
{
options.TokenValidationParameters = tokenValidationParameters;
configureJwtBearerOptions?.Invoke(options);
});
builderOptions?.Invoke(builder); builderOptions?.Invoke(builder);
return services; return services;
} }

@ -1,4 +1,5 @@
using Infrastructure.Options; using Infrastructure.Options;
using Microsoft.AspNetCore.Authorization;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
namespace Infrastructure.Extensions; namespace Infrastructure.Extensions;
@ -10,10 +11,12 @@ public static class AuthorizeSetup
/// </summary> /// </summary>
/// <param name="services"></param> /// <param name="services"></param>
/// <param name="configuration"></param> /// <param name="configuration"></param>
/// <param name="configureAuthorizeBuilder"></param>
/// <returns></returns> /// <returns></returns>
public static IServiceCollection AddDefaultAuthorize( public static IServiceCollection AddDefaultAuthorize(
this IServiceCollection services, this IServiceCollection services,
IConfiguration configuration) IConfiguration configuration,
Action<AuthorizationBuilder>? configureAuthorizeBuilder = null)
{ {
ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configuration); ArgumentNullException.ThrowIfNull(configuration);
@ -35,10 +38,11 @@ public static class AuthorizeSetup
audienceOptions.Duration, audienceOptions.Duration,
signingCredentials)); signingCredentials));
services.AddAuthorizationBuilder() var builder = services.AddAuthorizationBuilder();
.AddPolicy(audienceOptions.Policy!, policy => builder.AddPolicy(audienceOptions.Policy!, policy =>
policy.RequireRole(audienceOptions.Roles!) policy.RequireRole(audienceOptions.Roles!)
.Build()); .Build());
configureAuthorizeBuilder?.Invoke(builder);
return services; return services;
} }
} }

@ -13,16 +13,23 @@ public static class ControllerSetup
/// 配置controller包含过滤器、json序列化以及模型验证等配置 /// 配置controller包含过滤器、json序列化以及模型验证等配置
/// </summary> /// </summary>
/// <param name="services"></param> /// <param name="services"></param>
/// <param name="configureControllers"></param> /// <param name="configureControllers">配置Controllers</param>
/// <param name="configureMvcOptions">mvc配置选项</param>
/// <param name="configureMvcNewtonsoftJsonOptions">json序列化配置选项</param>
/// <param name="configureApiBehaviorOptions">api行为配置选项</param>
/// <returns></returns> /// <returns></returns>
public static IServiceCollection AddDefaultControllers(this IServiceCollection services, public static IServiceCollection AddDefaultControllers(this IServiceCollection services,
Action<IMvcBuilder>? configureControllers = null) Action<IMvcBuilder>? configureControllers = null,
Action<MvcOptions>? configureMvcOptions = null,
Action<MvcNewtonsoftJsonOptions>? configureMvcNewtonsoftJsonOptions = null,
Action<ApiBehaviorOptions>? configureApiBehaviorOptions = null)
{ {
ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(services);
var mvcBuilder = services.AddControllers(options => var mvcBuilder = services.AddControllers(options =>
{ {
options.Filters.Add<ExceptionsFilter>(); options.Filters.Add<ExceptionsFilter>();
options.Filters.Add<IdempotencyFilter>(); options.Filters.Add<IdempotencyFilter>();
configureMvcOptions?.Invoke(options);
}); });
mvcBuilder.AddNewtonsoftJson(options => mvcBuilder.AddNewtonsoftJson(options =>
@ -33,6 +40,7 @@ public static class ControllerSetup
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local; options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
options.SerializerSettings.Converters.Add(new StringEnumConverter()); options.SerializerSettings.Converters.Add(new StringEnumConverter());
configureMvcNewtonsoftJsonOptions?.Invoke(options);
}); });
mvcBuilder.ConfigureApiBehaviorOptions(options => mvcBuilder.ConfigureApiBehaviorOptions(options =>
{ {
@ -41,6 +49,7 @@ public static class ControllerSetup
var message = new MessageData(false, "the input value not valid", 400); var message = new MessageData(false, "the input value not valid", 400);
return new OkObjectResult(message.Serialize()); return new OkObjectResult(message.Serialize());
}; };
configureApiBehaviorOptions?.Invoke(options);
}); });
configureControllers?.Invoke(mvcBuilder); configureControllers?.Invoke(mvcBuilder);
return services; return services;

Loading…
Cancel
Save