我正在尝试在Web API项目中,当模型未通过验证时返回自定义响应对象。我已经对模型附加了属性,如下所示:
public class DateLessThanAttribute : ValidationAttribute
{
private readonly string _comparisonProperty;
public DateLessThanAttribute(string comparisonProperty)
{
_comparisonProperty = comparisonProperty;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
ErrorMessage = ErrorMessageString;
var currentValue = (DateTime)value;
var property = validationContext.ObjectType.GetProperty(_comparisonProperty);
if (property == null)
throw new ArgumentException("Property with this name not found");
var comparisonValue = (DateTime)property.GetValue(validationContext.ObjectInstance);
if (currentValue > comparisonValue)
return new ValidationResult(ErrorMessage);
return ValidationResult.Success;
}
}
关于模型:
[DateLessThan("EndDate", ErrorMessage = "StartDate must be less than EndDate")]
public DateTime StartDate { get; set; }
还有控制器:
public void PostCostingStandard(CostStandardRequest request)
{
CostResult costResult;
if (ModelState.IsValid)
{
// work
}
else
{
// return bad costResult object
}
}
然而,该模型从未进入控制器以调用
ModelState.IsValid
方法。我尝试创建一个ActionFilterAttribute
并将其附加到控制器操作上,如此处所述,但是设置断点时,由于DateLessThanAttribute首先返回响应,因此ActionFilterAttribute
从未运行。我是否忽略了这些筛选器的顺序或者我只是实现有误?