C# 如何在具有多个属性的属性上停止模型验证传播

C# 如何在具有多个属性的属性上停止模型验证传播,c#,asp.net-web-api,data-annotations,C#,Asp.net Web Api,Data Annotations,我的web api中有以下模型 public class MyModel { [Required(ErrorMessage = "Date is required")] [ValidDate(ErrorMessage = "Not a valid date format")] [ValidStartDate(ErrorMessage = "Not a valid start date")] public string startDate { get; set; }

我的web api中有以下模型

public class MyModel
{
    [Required(ErrorMessage = "Date is required")]
    [ValidDate(ErrorMessage = "Not a valid date format")]
    [ValidStartDate(ErrorMessage = "Not a valid start date")]
    public string startDate { get; set; }


    [Required(ErrorMessage = "Date is required")]
    [ValidDate(ErrorMessage = "Not a valid date format")]
    [IsDateAfterOrOnStartDate("startDate", ErrorMessage = "end date must be greater than or equal to start date")]
    public string endDate { get; set; }

}
我在自定义属性ValidDataAttribute、ValidStartDateAttribute和IsDateAfterOrOnStartdateAttribute中实现了一些自定义逻辑。但是我想要的是,如果ValidDataAttribute(在两个属性上)给出错误或者模型验证失败。我不希望框架在startDate属性上执行ValidStartDateAttribute,在endDate属性上执行IsDateAfterOrOnStartDateAttribute,换句话说,我希望模型验证本身在那里停止,而不需要进一步传播和执行这些属性上的其他属性


我是否可以实现所需的结果?

不确定您是否能够准确地执行所需的操作,但从逻辑上讲,如果没有值或无效值,这些其他验证属性就没有意义。因此,您可以很容易地让他们在添加自己的验证错误之前执行相同的检查。换句话说,如果没有值,则让ValidDate不添加其错误;如果没有值或该值不是有效日期,则让IsDateAfterOrnStartDate不添加其错误。最终结果将是您想要的。

不确定您是否能够准确地执行您想要的操作,但从逻辑上讲,如果没有值或无效值,这些其他验证属性就没有意义。因此,您可以很容易地让他们在添加自己的验证错误之前执行相同的检查。换句话说,如果没有值,则让ValidDate不添加其错误;如果没有值或该值不是有效日期,则让IsDateAfterOrnStartDate不添加其错误。最终的结果将是您想要的。

这是我之前所想的,但如果我在一个验证器中检查两个不同的条件,并用该验证器和硬代码“ErrorMessage=…”装饰一个属性,那么问题就来了对于一些自定义消息,无论这两个规则中的哪一个条件失败,我只能向客户端发送一条消息。我的意思是,每个规则仍然只会触发(中断)单个条件,但第二个和第三个规则只会在检查较简单的条件后检查它们的条件。用户只会看到失败的最简单规则的消息。这是我之前所想的,但如果我在一个验证器中检查两个不同的条件,并用该验证器和硬代码“ErrorMessage=…”装饰一个属性,那么问题就来了对于一些自定义消息,无论这两个规则中的哪一个条件失败,我只能向客户端发送一条消息。我的意思是,每个规则仍然只会触发(中断)单个条件,但第二个和第三个规则只会在检查较简单的条件后检查它们的条件。用户只会看到失败的最简单规则的消息。