模型的 FluentValidation

FluentValidation of a model

这是否可能验证模型并return使用流利断言为模型class显示消息。我希望能够验证 DistancePoint 值。

    [HttpGet]
    [Route("{distanceMethod}/{measureUnit}")]
    public ActionResult<DistanceResponse> Get(DistanceMethod distanceMethod, MeasureUnit measureUnit,
        [FromQuery] double point1Latitude, [FromQuery] double point1Longitude,
        [FromQuery] double point2Latitude, [FromQuery] double point2Longitude)
    {
        var point1 = new DistancePoint
        {
            Latitude = point1Latitude,
            Longitude = point1Longitude
        };
        var point2 = new DistancePoint
        {
            Latitude = point2Latitude,
            Longitude = point2Longitude
        };

这就是我尝试实现它的方式。

   public class DistancePointValidator:AbstractValidator<DistancePoint>
    {
        public DistancePointValidator()
        {
           RuleFor(x => x.Latitude).GreaterThanOrEqualTo(-90).WithMessage("Latitude can not be greater than -90");
           RuleFor(x => x.Latitude).LessThanOrEqualTo(90).WithMessage("Latitude can not be less than 90");
           RuleFor(x => x.Longitude).GreaterThanOrEqualTo(-180).WithMessage("Longitude can be greater than 180");
           RuleFor(x => x.Longitude).GreaterThan(180).WithMessage("Longitude can be less than 180");
        }
    }

并且我在启动文件中注册了class。

                 services
                .AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
                .AddFluentValidation(cfg => { cfg.RegisterValidatorsFromAssemblyContaining<DistancePoint>(); });

谢谢


第 2 部分:我现在面临的问题是 validationPoint2 失败,因为值太大,它是 validationPoint2.IsValid 条件,但错误消息为空。当我检查 validationPoint1 时,它有错误消息。

        var validationPoint1 = _validator.Validate(point1);
        var validationPoint2 = _validator.Validate(point2);

        if (validationPoint1.IsValid)
        {
            return BadRequest(validationPoint1);
        }

        if (validationPoint2.IsValid)
        {
            return BadRequest(validationPoint2);
        }

您必须将验证程序注入您的控制器:

        private IValidator<DistancePoint> _validator;

        public YourControllerController(IValidator<DistancePoint> validator)
        {
            _validator = validator;
        }

然后在 Get 方法中验证您的变量,如下所示:

            var validationResult = _validator.Validate(point1);
            if (!validationResult.IsValid)
            {
                // validation failed
            }