namespace TestWeb.Utils; public class RequestValidationFilter( ILogger> logger, IValidator? validator = null) : IEndpointFilter { public async ValueTask InvokeAsync( EndpointFilterInvocationContext context, EndpointFilterDelegate next) { var requestName = typeof(TRequest).FullName; if (validator is null) { logger.LogInformation("{Request}: No validator configured.", requestName); return await next(context); } logger.LogInformation("{Request}: Validating...", requestName); var request = context.Arguments.OfType().First(); var validationResult = await validator.ValidateAsync( request, context.HttpContext.RequestAborted ); if (!validationResult.IsValid) { logger.LogWarning("{Request}: Validation failed.", requestName); return TypedResults.ValidationProblem(validationResult.ToDictionary()); } logger.LogInformation("{Request}: Validation succeeded.", requestName); return await next(context); } }