Watch
1
0
Fork
You've already forked test-web
0
test-web/src/Utils/RequestValidationFilter.cs
Chris Dill 0e79a8eb5e
All checks were successful
Build / build (push) Successful in 52s
Initial commit
2026-05-30 12:26:50 +01:00

34 lines
1.2 KiB
C#
Executable file

namespace TestWeb.Utils;
public class RequestValidationFilter<TRequest>(
ILogger<RequestValidationFilter<TRequest>> logger,
IValidator<TRequest>? validator = null) : IEndpointFilter
{
public async ValueTask<object?> 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<TRequest>().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);
}
}