当模型在我的 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; }
和 Controller :
public void PostCostingStandard(CostStandardRequest request)
{
CostResult costResult;
if (ModelState.IsValid)
{
// work
}
else
{
// return bad costResult object
}
}
但是,模型永远不会到达 Controller 内部以命中 ModelState.IsValid
。我已经尝试创建一个 ActionFilterAttribute
并将其作为 outlined here 附加到我的 Controller 操作中,但是在设置断点时,ActionFilterAttribute
永远不会运行,因为 DateLessThanAttribute 首先返回响应。是否有我错过的这些过滤器的顺序,或者我只是错误地实现了什么?
最佳答案
您必须禁用自动模型状态验证。您可以通过将以下代码添加到您的 startup.cs
来实现services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
关于c# - ASP.NET Core Web API 验证错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53177081/