标签: fluentvalidation

大于或等于与流利验证的枚举比较?

好吧,假设我正在尝试根据枚举的值有条件地验证对象,我该怎么做?

这是一个验证对象的示例调用.

MyObjectValidator validator = new MyObjectValidator();
ValidationResult results = validator.Validate(new MyObject());
Run Code Online (Sandbox Code Playgroud)

这是一个具有枚举值的类的示例.

public class MyObjectValidator : AbstractValidator<MyObject>
{

    public MyObjectValidator()
    {
        RuleFor(x => x.anEnum).Equal(MyObject.MyEnum.First).SetValidator(new FirstValidator());
    }

}

public class FirstValidator : AbstractValidator<MyObject>
{

    public FirstValidator()
    {
        RuleFor(x => x.someDecimal).Equal(1).WithMessage("Decimal must equal 5 with anEnum set to First");
    }

}

public class MyObject
{

    public enum MyEnum : int
    {
        First = 0,
        Second = 1,
        Third = 2
    }

    public decimal someDecimal { get; set; }
    public MyEnum anEnum …
Run Code Online (Sandbox Code Playgroud)

.net c# enums fluentvalidation

3
推荐指数
1
解决办法
3081
查看次数

只应验证最小/最大长度

我在ASP.NET MVC 4项目中使用FluentValidation框架进行服务器端和客户端验证.

是否有原生(非黑客)方式来验证字符串长度只有最大长度,或只有最小长度?

例如这样:

var isMinLengthOnly = true;
var minLength = 10;
RuleFor(m => m.Name)
    .NotEmpty().WithMessage("Name required")
    .Length(minLength, isMinLengthOnly);
Run Code Online (Sandbox Code Playgroud)

默认错误消息模板应该不是

'Name' must be between 10 and 99999999 characters. You entered 251 characters.

'Name' must be longer 10 characters. You entered 251 characters.

并且应该支持客户端属性,例如黑客RuleFor(m => m.Name.Length).GreaterThanOrEqual(minLength)(不确定它是否有效)不适用.

asp.net-mvc fluentvalidation asp.net-mvc-3 asp.net-mvc-4

3
推荐指数
1
解决办法
5440
查看次数

ServiceStack - 验证和数据库访问

我正在使用ServiceStack实现Api.我的解决方案的一个关键方面是积极的验证策略.

我使用ServiceStack的ValidationFeature,这意味着如果在应用程序容器中注册了IValidator <ReqDto>(或其后代:AbstractValidator <ReqDto>),则验证将在服务之前自动运行.

通过积极验证,我的意思是我检查所有可能的错误情况,以及验证器级别的逻辑验证.因此,我的服务逻辑非常简洁.

从实际的角度来看,服务验证的服务逻辑的这种独立性是非常好的,因为它提供了非常容易阅读和推理服务逻辑/实现的原因.但是,我开始认为FluentValidation的规则和规则集更适合简单的格式验证,而不是直接在我正在进行的数据库访问(主要是测试源自请求中提取的ID的404错误).

问题:

1:验证逻辑在概念上访问数据库是否不正确?

2:从我所看到的,到目前为止,包括SS源,我没有找到一个形式来定义的情况下,如FluentValidation规则:从请求拉一个ID,访问数据库中检索一个实体,并抛出一个404如果没有找到进入.我只使用FV规则来定义基本格式验证,例如:

RuleFor(x => x.UserName).NotEmpty();
RuleFor(x => x.Password).NotEmpty();
Run Code Online (Sandbox Code Playgroud)

其余的我手动做.有解决这个问题的人吗?

注意:这不是关于如何将ValidationResult/ValidationError转换为HttpResult/HttpError的问题.通过使用SS 3.9.44中引入的ValidationFeature的ErrorResponseFilter,我已经介绍过了.谢谢

c# validation fluentvalidation servicestack

3
推荐指数
1
解决办法
900
查看次数

FluentValidation NotEmpty消息未显示

例如,FluentValidation验证用户输入的空电子邮件地址。

我链接了两个函数,但它跳过.NotEmpty().WithMessage()并跳转到下一个是EmailAddress().WithMessage()

RuleFor(r => r.EmailAddress)
                .NotEmpty().WithMessage("Email address is required.")
                .EmailAddress().WithMessage("Email address is not valid.");
Run Code Online (Sandbox Code Playgroud)

为什么错误消息是"Email address is not valid."链中的第一个错误消息"Email address is required."

c# validation asp.net-mvc fluentvalidation

3
推荐指数
1
解决办法
911
查看次数

如何在c#应用程序中使用FluentValidation

我正在构建具有以下层的应用程序

数据 - 实体框架上下文实体 - 实体框架POCO对象服务 - 由WebApi调用以加载/保存实体WebApi -

现在我相信我应该将我的业务逻辑放入服务层,因为我有实体服务,例如,我有Family对象和Family Service.

要使用FluentValidation创建验证对象,似乎必须从AbstractValidator继承,因为我的服务已经从一个对象继承这是不可能的(或者是它)?

我想我唯一的选择是在服务层创建一个FamilyValidator并从服务中调用此验证器?

fluentValidation是我最好的选择,还是我在这里混淆了什么?

c# entity-framework business-logic fluentvalidation asp.net-web-api

3
推荐指数
1
解决办法
7611
查看次数

流利验证的正则表达式问题

可能非常愚蠢的问题,但是在这方面需要帮助。

我将MVC Fluent验证规则添加到模型属性中,但是由于某种原因,其中一个验证规则失败。添加了一个正则表达式以允许使用英语和西班牙语字符,并且不允许使用除-和'以外的数字或特殊字符。由于某些原因,当用户输入多个有效字符作为输入时,仍会显示错误。

当用户输入为aA时仍显示错误

我正在使用此RegE @“ ^ [a-zA-Z-'] $”) 允许用户使用英语和西班牙语字符,除-和'外,不允许使用任何数字或特殊字符。

任何帮助表示赞赏。

  RuleFor(x => x.FirstName)              
 .NotEmpty().WithLocalizedMessage(ResourceAreas.Messages.Message_PersonalDetails_1001_firstname)
 .Length(1, 
     20).WithLocalizedMessage(ResourceAreas.Messages.Message_Onboarding_100006_maxlength) 
 .Matches(@"^[a-zA-Z-']$").WithLocalizedMessage(ResourceAreas.Messages.Message_Onboarding_PersonalDetails_100007_validname);
Run Code Online (Sandbox Code Playgroud)

c# regex asp.net-mvc fluentvalidation asp.net-mvc-4

3
推荐指数
1
解决办法
1万
查看次数

流利的验证条件规则

我们有一个条件要求,即只有在打开标志时才应将空规则应用于字段.类似下面的代码.

这是正确的方法吗?

public AccountSetupModelValidator(ISessionProvider sessionProvider)
    {
        var regexPatterns = new RegExPatterns();

        RuleFor(x => x.MemorableDate)
            .NotEmpty().WithLocalizedMessage(ResourceAreas.Messages.Message_AccountSetup_1001_memorabledate);


        RuleFor(x => x.MemorableDateAnswer)
            .NotEmpty().WithLocalizedMessage(ResourceAreas.Messages.Message_AccountSetup_1001_memorabledateanswer)
            .Matches(regexPatterns.MemorableDateFormat).WithLocalizedMessage(ResourceAreas.Messages.Message_Onboarding_100007_memorabledateinvalidformat)
            .Length(5).WithLocalizedMessage(ResourceAreas.Messages.Message_Onboarding_100006_maxlength);

       RuleFor(x => x.SecurityQuestion)
           .NotEmpty().WithLocalizedMessage(ResourceAreas.Messages.Message_AccountSetup_1001_securityquestion);

        RuleFor(x => x.SecurityAnswer)
            .NotEmpty().WithLocalizedMessage(ResourceAreas.Messages.Message_AccountSetup_1001_securityanswer) 
            .Length(1, 40).WithLocalizedMessage(ResourceAreas.Messages.Message_Onboarding_100006_maxlength);

        if (sessionProvider.OnboardingApplicationData.ToggleNavigationView.HasProvisionalAccount)
        {

              RuleFor(x => x.TempCardNumber)
                .NotEmpty().WithLocalizedMessage(ResourceAreas.Messages.Message_AccountSetup_100006_tempcard)
                .Matches(regexPatterns.NumericOnly)
                .WithLocalizedMessage(ResourceAreas.Messages.Message_Onboarding_100007_numbersonly)
                .Length(15).WithLocalizedMessage(ResourceAreas.Messages.Message_AccountSetup_100006_tempcard);

            RuleFor(x => x.SecurityCode)
                .NotEmpty().WithLocalizedMessage(ResourceAreas.Messages.Message_AccountSetup_100006_tempcard)
                .Matches(regexPatterns.NumericOnly)
                .WithLocalizedMessage(ResourceAreas.Messages.Message_Onboarding_100007_numbersonly)
                .Length(4).WithLocalizedMessage(ResourceAreas.Messages.Message_AccountSetup_100006_securitycode);
        }

    }
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc fluent fluentvalidation

3
推荐指数
1
解决办法
7955
查看次数

Fluent Validation无法在用于本地化的ResourceManager类上查找属性

我在NancyFX应用程序中使用Fluent验证.使用nuget包安装:Nancy.Validation.FluentValidation

我编写了自己的属性Validator类,并完成了可以通过Strings.invalid_ip属性获取的错误消息的本地化.

所有其他本地化在我的项目中工作正常,Fluent验证例外,它无法在Strings资源管理器类中找到任何属性.

namespace LmsNg.Validators
{
    public class IsIpAddressValidator : PropertyValidator
    {
        public IsIpAddressValidator()
            : base(() => Strings.invalid_ip)

            //also tried another overload, but the same exception happens
            //base("invalid_ip", typeof(Strings))
        {
        }

        protected override bool IsValid(PropertyValidatorContext context)
        {
            var ip = context.PropertyValue as string;
            IPAddress address;

            if (ip != null && IPAddress.TryParse(ip, out address))
            {
                return true;
            }

            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

文件属性

一旦IsIpAddressValidator使用,当验证返回false时,我得到一个例外.

FluentValidation.dll中出现"System.InvalidOperationException"类型的异常,但未在用户代码中处理

System.InvalidOperationExcepction: Could not find a property named 'invalid_ip' on …

c# localization fluentvalidation nancy

3
推荐指数
1
解决办法
1068
查看次数

FluentValidation:将值与其他字段进行比较

有人提到我将FluentValidation用于MVC5 C#ASP.NET。我正在尝试将一个字段与其他两个字段进行比较,但出现错误。

我自定义的“ AbstractValidator”中的代码如下:

RuleFor(x => x.Length).LessThanOrEqualTo(y => y.LengthMax)
   .GreaterThanOrEqualTo(z => z.LengthMin);
Run Code Online (Sandbox Code Playgroud)

当视图尝试使用EditFor()此错误呈现“长度”字段的控件时,显示...

附加信息:不打扰的客户端验证规则中的验证类型名称必须是唯一的。多次查看以下验证类型:范围

如何将一个值与同一模型的其他两个值进行比较。

fluentvalidation asp.net-mvc-5

3
推荐指数
2
解决办法
4290
查看次数

流利的验证将CustomAsync更改为MustAsync

有人可以帮我解决这个问题吗?我正在尝试将CustomAsync更改为MustAsync,但是我无法使工作正常。下面是我的自定义方法

RuleFor(o => o).MustAsync(o => {
            return  CheckIdNumberAlreadyExist(o)
          });

      private static async Task<ValidationFailure> CheckIdNumberAlreadyExist(SaveProxyCommand command)
      {
          if (command.Id > 0)
              return null;

          using (IDbConnection connection = new SqlConnection(ConnectionSettings.LicensingConnectionString))
          {
              var param = new DynamicParameters();
              param.Add("@idnumber", command.IdNumber);

              var vehicle = await connection.QueryFirstOrDefaultAsync<dynamic>("new_checkDuplicateProxyIdNumber", param, commandType: CommandType.StoredProcedure);

              return vehicle != null
                  ? new ValidationFailure("IdNumber", "Id Number Already Exist")
                  : null;
          }
       }
Run Code Online (Sandbox Code Playgroud)

c# fluentvalidation asp.net-web-api2

3
推荐指数
2
解决办法
3507
查看次数