c# - FluentValidation 自动验证请求 .NET 7 Minimal API

标签 c# asp.net-core fluentvalidation .net-7.0 minimal-apis

我正在使用 FluentValidation 11.5.1。 我不想使用:

// MapPost //
public static void AddUser([FromBody] UserRequest, [FromServices] IValidator<UserRequest> validator)

我希望它是自动的:

public static void AddUser([FromBody] UserRequest)
{
 If it will fail, it would show the errors and wouldn't get here,
 Without to injecting the validator.
}

在Program.cs中,我使用了:

services.AddMvc().AddFluentValidation() - it's deprecated and minimal api is not mvc.

但没有成功。

  • 验证器如何在不注入(inject)验证器的情况下自动验证请求?
  • 来自客户端的请求 -> EndPoint: AddUser([FromBody] UserRequest) -> 如果它无法通过验证,您将从 FluentValidation 收到错误,而无需“[FromServices] IValidator validator”在端点中注入(inject)验证器,有点就像数据注释一样。

最佳答案

据我所知,目前没有任何内置内容。您可以查看一些第三方库,例如 O9d.AspNet.FluentValidation其中包含验证过滤器以支持流畅的验证。

其他选项:

  1. 编写您自己的验证过滤器,如this answer 。让您开始:
public class ValidationFilter<T> : IEndpointFilter where T : class
{
    private readonly IValidator<T> _validator;

    public ValidationFilter(IValidator<T> validator)
    {
        _validator = validator;
    }

    public async ValueTask<object?> InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next)
    {
        var obj = context.Arguments.FirstOrDefault(x => x?.GetType() == typeof(T)) as T;

        if (obj is null)
        {
            return Results.BadRequest();
        }

        var validationResult = await _validator.ValidateAsync(obj);

        if (!validationResult.IsValid)
        {
            return Results.BadRequest(string.Join("/n", validationResult.Errors));
        }

        return await next(context);
    }
}

// and usage 
app.MapPost("api/user", (Example e) =>  e)
    .AddEndpointFilter<ValidationFilter<Example>>();
  • 通过创建包装器来利用绑定(bind)机制 ( for example ),该包装器将解析传入的 json 并执行验证。
  • 关于c# - FluentValidation 自动验证请求 .NET 7 Minimal API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75735862/

    相关文章:

    c# - 在 C# 的字典中存储相似对象的最佳方法是什么?

    c# - 我可以运行应用程序(或存储过程)并从触发器获取结果吗

    c# - 如何使用 FluentValidation 验证 Guid 列表

    asp.net-core-mvc - Fluent 验证和 ASP.NET Core 6 Web API

    c# - 流利的验证 SetCollectionValidator

    c# - 捕捉声音输出

    c# - Nhibernate一对多添加元素

    asp.net-core - ASP.Net Core Razor Pages 应用程序未绑定(bind)到模型中的属性

    c# - .net core razor 页面中的多个 View 组件未正确绑定(bind)

    c# - Visual Studio在azure中的wwwroot内部署文件夹在哪里