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

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

@ -13,16 +13,23 @@ public static class ControllerSetup
/// 配置controller包含过滤器、json序列化以及模型验证等配置
/// </summary>
/// <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>
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);
var mvcBuilder = services.AddControllers(options =>
{
options.Filters.Add<ExceptionsFilter>();
options.Filters.Add<IdempotencyFilter>();
configureMvcOptions?.Invoke(options);
});
mvcBuilder.AddNewtonsoftJson(options =>
@ -33,6 +40,7 @@ public static class ControllerSetup
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
options.SerializerSettings.Converters.Add(new StringEnumConverter());
configureMvcNewtonsoftJsonOptions?.Invoke(options);
});
mvcBuilder.ConfigureApiBehaviorOptions(options =>
{
@ -41,6 +49,7 @@ public static class ControllerSetup
var message = new MessageData(false, "the input value not valid", 400);
return new OkObjectResult(message.Serialize());
};
configureApiBehaviorOptions?.Invoke(options);
});
configureControllers?.Invoke(mvcBuilder);
return services;

Loading…
Cancel
Save