模型的 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
}
这是否可能验证模型并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
}