标签: fluentvalidation

When&must的FluentValidation?

当dropdownlist值为,yes并且字段必须为date 时,我正在尝试使用FluentValidation validaton .当dropdownlist yes检查时它正在工作date.但是当我选择No它时,它也会显示验证Must be date.

它应该不再验证是否下拉列表值除了yes.我们怎么做?

 RuleFor(x => x.DtPublishedTimeText)
            .NotEmpty()
            .When(HasMaterialPublishedElseWhereText)
            .WithMessage("Required Field")
            .Must(BeAValidDate)
            .WithMessage("Must be date");

private bool BeAValidDate(string val)
{
    DateTime date;
    return  DateTime.TryParse(val, out date);
}

private bool HasMaterialPublishedElseWhereText(MeetingAbstract model)
{
    return model.HasMaterialPublishedElseWhereText != null && 
             model.HasMaterialPublishedElseWhereText.Equals("yes");
}
Run Code Online (Sandbox Code Playgroud)

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

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

Fluent Validation不接受带有千位分隔符的数字

我有一个使用Fluent Validation for MVC 5的ASP.NET MVC 5项目.我还使用jQuery masking插件自动添加数千个双值.

在模型中我有:

    [Display(Name = "Turnover")]
    [DisplayFormat(ApplyFormatInEditMode = true,ConvertEmptyStringToNull =true,DataFormatString ="#,##0")]
    public double? Turnover { get; set; }
Run Code Online (Sandbox Code Playgroud)

在视图中我有:

<th class="col-xs-2">
    @Html.DisplayNameFor(model=>model.Turnover)
</th>
<td class="col-xs-4">
    @Html.TextBoxFor(model => model.Turnover, new { @class = "form-control number", placeholder="Enter number. Thousands added automatically" })
</td>
<td class="col-xs-6">
    @Html.ValidationMessageFor(model => model.Turnover, "", new { @class = "text-danger" })
</td>
Run Code Online (Sandbox Code Playgroud)

为包含模型定义了一个流畅的验证器,但它不包含任何规则.我只使用服务器端验证.

public class MyModelValidator: AbstractValidator<MyModel>
{
    public MyModelValidator()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到了营业额的验证错误如下: 在此输入图像描述

我尝试使用模型绑定来解决这个问题.但是模型绑定器的断点永远不会受到打击 - 流畅的验证似乎阻止了达到模型绑定器的价值.

c# asp.net-mvc fluentvalidation

11
推荐指数
1
解决办法
1110
查看次数

在Asp.net Core中使用Swagger进行流畅验证

我目前正在使用Fluent Validation而不是使用Data Annotations我的Web API并使用swagger来获取API文档.流畅的验证规则没有反映在swagger模型中,因为我无法使用swagger模式过滤器配置流畅的验证规则.

本博客对ASP.net MVC使用它有很好的解释.但我无法配置它在ASP.net Core中使用它.

到目前为止,我已经尝试了以下代码,但我无法获得验证器类型.

services.AddSwaggerGen(options => options.SchemaFilter<AddFluentValidationRules>());

public class AddFluentValidationRules : ISchemaFilter
{
    public void Apply(Schema model, SchemaFilterContext context)
    {
        model.Required = new List<string>();
        var validator = GetValidator(type); // How?
        var validatorDescriptor = validator.CreateDescriptor();

        foreach (var key in model.Properties.Keys)
        {
            foreach (var propertyValidator in validatorDescriptor.GetValidatorsForMember(key))
            {
                 // Add to model properties as in blog
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

fluentvalidation swagger asp.net-core

11
推荐指数
3
解决办法
4727
查看次数

ASP.NET中输入验证的最佳实践?

输入验证的常见做法是什么?换句话说,您是在客户端,服务器端还是双方检查输入验证?

此外,如果性能对我来说至关重要,那么客户端输入验证是否足以支持我的网站而不会带来任何安全风险?

asp.net validation xval fluentvalidation

10
推荐指数
1
解决办法
3739
查看次数

使用Fluent验证配置NancyFx

我是否需要在应用程序Bootstrapper中添加任何配置代码以在Nancy中启用FluentValidation?

按照https://github.com/NancyFx/Nancy/tree/master/src/Nancy.Demo.Validation中的示例,我尝试在模型上使用this.Validate时收到以下异常消息:无法找到模型验证工厂.

我正在使用Nancy版本0.11.0.0

configuration fluentvalidation nancy

10
推荐指数
1
解决办法
3085
查看次数

在客户端进行流畅的验证

在ASP.NET MVC4应用程序中,我们使用FluentValidation来验证我们的模型.在某些情况下,我们只想在另一个属性具有值时验证属性.我们使用When关键字来完成此任务.一个简单的验证类如下所示:

public class PersonValidator : AbstractValidator<Person>
{
    public PersonValidator()
    {
        RuleFor(item => item.FirstName).NotEmpty();
        RuleFor(item => item.LastName).NotEmpty().When(item => !string.IsNullOrEmpty(item.FirstName))
    }
}
Run Code Online (Sandbox Code Playgroud)

我们希望对此进行客户端验证.我试图创建一个自定义FluentValidationPropertyValidator.但我找不到一种方法来获取验证规则的When部分.有人能指出我正确的方向吗?

asp.net-mvc client-side-validation fluentvalidation

10
推荐指数
1
解决办法
2832
查看次数

测试FluentValidation PropertyValidator

是否可以单独测试FluentValidation PropertyValidator

我知道我可以测试使用PropertyValidator特定错误的Validator,但是如果可能的话,我宁愿在属性验证器上测试true/false.

可以这样做吗?如果是这样,怎么样?

c# validation fluentvalidation

10
推荐指数
3
解决办法
3216
查看次数

流畅的验证:在自定义验证上设置自定义消息

脚本

我有一个自定义规则来验证订单的运费:

public class OrderValidator : BaseValidator<Order>
{

    private string CustomInfo { get; set; }

    public OrderValidator()
    {
        //here I call the custom validation method and I try to add the CustomInfo string in the message
        RuleFor(order => order.ShippingCost).Cascade(CascadeMode.StopOnFirstFailure).NotNull().Must(
            (order, shippingCost) => CheckOrderShippingCost(order, shippingCost)
        ).WithMessage("{PropertyName} not set or not correct: {PropertyValue}." + (String.IsNullOrEmpty(CustomInfo) ? "" : " " + CustomInfo));
    }

    //this is the custom validation method
    private bool CheckOrderShippingCost(Order o, decimal shippingCost)
    {
        bool res = false;

        try
        { …
Run Code Online (Sandbox Code Playgroud)

c# custom-errors fluentvalidation

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

检查参数是否是具有流畅验证的3个值之一

我有一个包含一个字符串属性的类:

public class Bla
{
    public string Parameter { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想编写一个自定义的AbstractValidator,它检查Parameter是否等于这些字符串中的任何一个:

str1, str2, str3
Run Code Online (Sandbox Code Playgroud)

我想这将是一个起点:

RuleFor(x => x.Parameter).Must(x => x.Equals("str1") || x.Equals("str2") || x.Equals("str3")).WithMessage("Please only use: str1, str2, str3");
Run Code Online (Sandbox Code Playgroud)

但是我可以将其链接并显示错误消息,理想情况下不会对可能性进行硬编码,例如:

Please only use: str1, str2, str3
Run Code Online (Sandbox Code Playgroud)

c# fluentvalidation

10
推荐指数
4
解决办法
7569
查看次数

是否可以在ASP.NET Core中组合[FromRoute]和[FromBody]?

我对API控制器有一个动作,如下所示:

[HttpPost]
public async Task<IActionResult> StartDeployment(
    [FromQuery]Guid deploymentId,
    [FromRoute]RequestInfo requestInfo,
    [FromBody]DeploymenRequest deploymentRequest)
{
}
Run Code Online (Sandbox Code Playgroud)

它由复杂的url(requestInfo)提供,并接收HTTP POST请求payload(deploymentRequest).

是否可以组合[FromRoute],[FromBody]所以我会有单一的请求模型:

public class UberDeploymentRequestInfo
{
    [FromQuery]public Guid DeploymentId { get; set; }

    [FromRoute]public RequestInfo RequestInfo { get; set; }

    [FromBody]public DeploymenRequest DeploymentRequest { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以我可以使用Fluent验证使用单个验证器:

internal class UberDeploymentRequestInfoValidator : AbstractValidator<UberDeploymentRequestInfo>
{
    public UberDeploymentRequestInfoValidator()
    {
        // validation rules can access both url and payload
    }
}
Run Code Online (Sandbox Code Playgroud)

c# fluentvalidation asp.net-core asp.net-core-routing

10
推荐指数
1
解决办法
1491
查看次数