fluentvalidation 相关问题

Fluent Validation是一个ASP.NET MVC集成验证框架,允许开发人员使用表达式设置验证规则。它是可测试的并且与控制(依赖注入)模式和TDD(测试驱动开发)技术的反转完全兼容。

FluentEditForm 说没有数据,尽管输入的数据在那里

下面我的代码是一个流畅的编辑表单。我提交后,它说即使我填写了这些字段仍然需要填写。我的代码有什么问题吗? @page“/movieform” @

回答 1 投票 0

使用 FluentValidation 如何在控制器中使用validationContext进行测试

我设置了一个验证器,需要使用正在验证的视图模型之外的值。为此,我使用 ValidationContext 并分配 RootContextData,然后调用 validate 方法...

回答 1 投票 0

使用依赖注入模式和传递数据进行流畅的验证

我想将数据传递给流畅的验证。我认为这很简单,你可以在构造函数中完成。但我不想创建验证器的实例,而是注入它,这使得它变得很困难。 我有 :

回答 2 投票 0

对具有正文请求的 GET 请求使用 Fluent Validation 是一种不好的做法吗?

我正在尝试在我的项目中使用 Fluent Validator。到目前为止,我的大多数教程都是使用 post 请求,其中您有一个 json 正文作为对象,并且该对象将被验证...

回答 1 投票 0

空对象的 FluentValidation 规则

我一直在尝试创建一个 FluentValidation 规则,在验证其属性之前检查它正在验证的对象的实例是否不为空。 我宁愿封装...

回答 11 投票 0

使用 FluentValidation 进行更深入的数据库验证是不好的做法吗?

例如,您可以验证电话号码或电子邮件,这些都在 FV 文档中,但是如果您需要确保该电话号码尚未被经理“X”的员工使用怎么办?我...

回答 2 投票 0

使用 FluentValidation 验证集合,返回属性的规则失败错误

我刚刚开始使用 FluentValidation v9.x,想知道如何验证集合中的规则。 基本上如果我有一系列物质 公共类物质 { 公共整数?

回答 2 投票 0

如何使用 MediatR 和 FluentValidation 实现通用 ValidationBehavion,以便 ValidationBehavion 仅在命令上触发

我正在使用 CQRS 并为了分隔命令和查询而创建了自定义接口,因此我希望我的 ValidationBehavion 仅在继承 IRequest 的自定义 ICommand 上触发 我正在使用 CQRS 并分离命令和查询,我创建了自定义接口,因此我希望我的 ValidationBehavion 仅在继承 IRequest 的自定义 ICommand 上触发,而不是在所有 IRequest 请求上触发。 为了分离命令和查询,我创建了自定义界面: (作为响应值,我使用 ErrorOr 库。但我认为不值得研究它,只需记住命令和查询总是有响应) public interface ICommand<TResponse> : IRequest<ErrorOr<TResponse>> { } public interface IQuery<TResponse> : IRequest<ErrorOr<TResponse>> { } public interface ICommandHandler<TCommand, TResponse> : IRequestHandler<TCommand, ErrorOr<TResponse>> where TCommand : ICommand<TResponse> { } public interface IQueryHandler<TQuery, TResponse> : IRequestHandler<TQuery, ErrorOr<TResponse>> where TQuery : IQuery<TResponse> { } 我知道一种标准方法,其中 IPipelineBehavior 会向任何请求者触发,然后我们检查该请求者是否有验证器: public class ValidationBehavion<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse> where TRequest : IRequest<TResponse> where TResponse : IErrorOr { private readonly IValidator<TRequest>? _validator; public ValidationBehavion(IValidator<TRequest>? validator = null) { _validator = validator; } public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken cancellationToken) { if(_validator is null) { return await next(); } var validationResult = await _validator.ValidateAsync(request); if (validationResult.IsValid) { return await next(); } var validationErrors = validationResult.Errors .ConvertAll(error => Errors.Wands.NotValid( error.PropertyName, error.ErrorMessage)); return (dynamic)validationErrors; } } 由于命令和查询是分离的,我想我可以指定 ICommand 而不是 IRequest 并重做 ValidationBehavion,如下所示: public class ValidationBehavion<TRequest, TResponse> : IPipelineBehavior<TRequest, ErrorOr<TResponse>> where TRequest : ICommand<TResponse> { private readonly IValidator<TRequest> _validator; public ValidationBehavion(IValidator<TRequest> validator) { _validator = validator; } public async Task<ErrorOr<TResponse>> Handle(TRequest request, RequestHandlerDelegate<ErrorOr<TResponse>> next, CancellationToken cancellationToken) { var validationResult = await _validator.ValidateAsync(request); if (validationResult.IsValid) { return await next(); } var validationErrors = validationResult.Errors .ConvertAll(error => Errors.Wands.NotValid( error.PropertyName, error.ErrorMessage)); return validationErrors; } } 但是这个 IPipelineBehavior 根本不起作用,我不知道为什么。 您可能需要注册该行为。你的startup.cs应该看起来像这样: public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddMediatR(typeof(Startup)); services.AddValidatorsFromAssemblyContaining<Startup>(); // Register pipeline behaviors services.AddTransient(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>)); services.AddTransient(typeof(IPipelineBehavior<,>), typeof(AuthorizationBehavior<,>)); services.AddTransient(typeof(IPipelineBehavior<,>), typeof(PerformanceBehavior<,>)); services.AddTransient(typeof(IPipelineBehavior<,>), typeof(UnhandledExceptionBehavior<,>)); // Register request pre-processors and post-processors services.AddTransient(typeof(IRequestPreProcessor<>), typeof(ValidationPreProcessor<>)); services.AddTransient(typeof(IRequestPostProcessor<,>), typeof(LoggingPostProcessor<,>)); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } 您在这里有完整的教程:https://argosco.io/using-ipipelinebehavior-irequestpreprocessor-and-irequestpostprocessor-in-a-net-core-api/net/

回答 1 投票 0

IPipelineBehavior ValidationBehavior 在 MediatR 中注册时不会被触发

我将使用 LangExt 库的 Result 替换所有异常。问题是 ValidationBehavior 甚至没有被触发。它曾经在方法签名曾经是公开的时候触发...

回答 1 投票 0

如何从多个程序集注册 FluentValidation

我如何添加在多个程序集中进行验证的流畅验证。 我在共享类库中也有验证器: 公共类 TestModelValidator :AbstractValidator 如何添加在多个程序集中进行验证的流畅验证。 我在共享类库中也有验证器: public class TestModelValidator : AbstractValidator<TestModel> { rules... } public class TestModel2Validator : AbstractValidator<TestModel2> { rules... } ... public class TestMode999Validator : AbstractValidator<TestMode999> { rules... } in my startup.cs: services.AddValidatorsFromAssemblyContaining<Startup>(); services.AddFluentValidationAutoValidation(); services.AddFluentValidationClientsideAdapters(); 安装包FluentValidation.AspNetCore 然后你可以使用这样的扩展方法: services.AddFluentValidation(fv => { fv.RegisterValidatorsFromAssembly(Assembly.GetExecutingAssembly()); fv.RegisterValidatorsFromAssemblyContaining<Assembly1Class>(); fv.RegisterValidatorsFromAssemblyContaining<Assembly2Class>(); }); 或者您可以使用方法 fv.RegisterValidatorsFromAssemblies() 并传递程序集列表。

回答 1 投票 0

验证规则取决于使用流畅验证的独立规则组的成功

我正在尝试为这种情况想出正确的语法: 规则A 规则B 以上两者都是独立的 规则 C - 仅当 RuleA 和 RuleB 通过验证时才会运行。 例子: 用户 ID 存在 (...

回答 1 投票 0

使用 FluentValidation 检查字符串是否是大于零的数字

我开始在 WPF 项目上使用 FluentValidation,到目前为止,我以一种简单的方式使用它来检查字段是否已填充或少于 n 个字符。 现在我必须检查是否插入了值(其中...

回答 3 投票 0

如何使用 FluentValidation 将字符串验证为日期时间

使用 FluentValidation,是否可以将字符串验证为可解析的 DateTime,而无需指定 Custom() 委托? 理想情况下,我想说类似 EmailAddress 函数的东西,...

回答 4 投票 0

流畅的验证 - 日期格式 yyyy-mm-dd

我已经搜索过,似乎找不到答案。 我正在尝试验证具有日期时间属性的出生日期。 RuleFor(c => c.Customer.DateOfBirth).NotEmpty().WithMessage...

回答 1 投票 0

使用 Generic 进行 Fluent 验证时出错

我正在尝试创建一个通用类以进行流畅的验证。参考下面的代码。 公共抽象类 GenericValidator : AbstractValidator { /// /// 我正在尝试创建一个通用类来进行流畅的验证。请参考以下代码。 public abstract class GenericValidator<T> : AbstractValidator<T> { /// <summary> /// Validates a string property to ensure it is not null, not empty, and meets a minimum length requirement. /// </summary> /// <param name="propertyValue">The string value to validate.</param> /// <param name="propertyName">The name of the property being validated.</param> /// <param name="minLength">The minimum length the string must have.</param> /// <param name="errorMessage">The error message format.</param> /// <returns>Returns a rule builder for further customization.</returns> protected IRuleBuilderOptions<T, string> ValidateString( Func<T, string> propertyValue, string propertyName, int minLength = 0, string errorMessage = "{PropertyName} is invalid.") { return *RuleFor*(propertyValue) .NotNull().WithMessage($"{propertyName} cannot be null.") .NotEmpty().WithMessage($"{propertyName} cannot be empty.") .MinimumLength(minLength).WithMessage($"{propertyName} must be at least {minLength} characters long.") .WithMessage(errorMessage); } } 我收到错误 “CS0411 无法从用法中推断出方法 'AbstractValidator.RuleFor(Expression>)' 的类型参数。尝试为“RuleFor”方法显式指定类型参数。 我对通用药物的了解有限。我尝试解决同样的问题但无法解决。 任何输入都会有帮助。为此,我使用版本 11* 的 Fluent 验证包。 需要采取什么措施来解决该错误? 正如错误消息所示:尝试为“RuleFor”显式指定类型参数。 return RuleFor<string>(propertyValue) ...

回答 1 投票 0

在 Fluentvalidation 中使用 SetValidator 验证通用集合

我正在尝试验证泛型类型: 公共类请求其中T:类 { 公共 int 测试 { 得到;放; } 公共列表记录{获取;放; } = []; } 如何设置

回答 1 投票 0

在 Fluentvalidation 中使用 SetValidator 验证基因集合

我正在尝试验证泛型类型: 公共类请求其中T:类 { 公共 int 测试 { 得到;放; } 公共列表记录{获取;放; } = []; ...

回答 1 投票 0

FluentValidation 修改 Must 函数中的错误消息

在负责验证的类内部我有简单的规则: RuleFor(u => u.Id) .Cascade(CascadeMode.StopOnFirstFailure) .NotEmpty().WithMessage("Id为必填项") .必须(有效...

回答 3 投票 0

Fluent Validation 执行规则取决于多个其他规则

假设我们有一些验证器: RuleFor(请求 => 请求.User) .NotEmpty() .必须(存在); RuleFor(请求 => 请求.房间) .NotEmpty() .必须(存在); RuleFor(请求 =>

回答 1 投票 0

Mudblazor Select 具有多选功能和 Fluentvalidation For-Expression

我在多选模式下绑定到选择字段,并且遇到了选择字段的“For”属性的问题。 这是一个代码片段 当使用选择字段时,选项...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.