diff --git a/Todo.Api/Filters/ValidationFilter.cs b/Todo.Api/Filters/ValidationFilter.cs index 129f4e7..fdca1d6 100644 --- a/Todo.Api/Filters/ValidationFilter.cs +++ b/Todo.Api/Filters/ValidationFilter.cs @@ -1,11 +1,13 @@ using System.Reflection; -using Microsoft.AspNetCore.Http.Metadata; using MiniValidation; namespace TodoApi; public static class ValidationFilterExtensions { + private static readonly ProducesResponseTypeMetadata ValidationErrorResponseMetadata = + new(400, typeof(HttpValidationProblemDetails), ["application/problem+json"]); + public static TBuilder WithParameterValidation(this TBuilder builder, params Type[] typesToValidate) where TBuilder : IEndpointConventionBuilder { builder.Add(eb => @@ -35,7 +37,7 @@ public static TBuilder WithParameterValidation(this TBuilder builder, } // We can respond with problem details if there's a validation error - eb.Metadata.Add(new ProducesResponseTypeMetadata(typeof(HttpValidationProblemDetails), 400, "application/problem+json")); + eb.Metadata.Add(ValidationErrorResponseMetadata); eb.FilterFactories.Add((context, next) => { @@ -56,13 +58,4 @@ public static TBuilder WithParameterValidation(this TBuilder builder, return builder; } - - // Equivalent to the .Produces call to add metadata to endpoints - private sealed class ProducesResponseTypeMetadata(Type type, int statusCode, string contentType) : - IProducesResponseTypeMetadata - { - public Type Type { get; } = type; - public int StatusCode { get; } = statusCode; - public IEnumerable ContentTypes { get; } = [contentType]; - } }