Я пытаюсь вернуть объект пользовательского ответа, когда модель не проходит проверку в моем проекте 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
и прикрепить его к своему действию контроллера, как указано здесь , но при установке точки останова ActionFilterAttribute
никогда не запускается, потому что DateLessThanAttribute сначала возвращает ответ. Есть ли порядок в этих фильтрах, который я пропустил или я просто что-то неправильно реализовал?