是否可以设置可选的[Required]属性,适用于PATCH或PUT。我有以下代码,但无论控制器调用它总是需要它。
public class Car
{
[DataMember(Order = 0)]
public string CarId { get; set; }
[DataMember(Order = 1)]
[Required]
public string IsIncluded { get; set; }
}
控制器;
[HttpPatch]
public HttpResponseMessage PatchCar(Car car)
{
// check if submitted body is valid
if (!ModelState.IsValid)
{
// Something is bad!
}
}
我想要的是以下内容;
public class Car
{
[DataMember(Order = 0)]
public string CarId { get; set; }
[DataMember(Order = 1)]
[Required(Patch = True, Put = False]
public string IsIncluded { get; set; }
}
然后我的ModelState会考虑到这一点。
我考虑过为每个动作(动词)创建单独的派生类,但代码很快变得非常冗长。
答案 0 :(得分:1)
这是使用数据注释进行验证的一个缺点,遗憾的是它们无法有条件地添加。
你有很多选择......
查看类似这样的内容。http://andrewtwest.com/2011/01/10/conditional-validation-with-data-annotations-in-asp-net-mvc/扩展所需的IfRequired并将条件验证添加到数据注释中。 (你需要自己动手,我应该想一想,它可能会变得笨拙!)
尝试使用FluentValidation。 http://fluentvalidation.codeplex.com/(根据您的申请要求,这可能是一个不错的选择)。
希望这有帮助!