根据HTTP Verb设置必填字段

时间:2014-04-08 14:54:57

标签: c# validation asp.net-web-api

是否可以设置可选的[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会考虑到这一点。

我考虑过为每个动作(动词)创建单独的派生类,但代码很快变得非常冗长。

1 个答案:

答案 0 :(得分:1)

这是使用数据注释进行验证的一个缺点,遗憾的是它们无法有条件地添加。

你有很多选择......

  1. 为每个动词创建单独的模型(或视图模型)。
  2. 查看类似这样的内容。http://andrewtwest.com/2011/01/10/conditional-validation-with-data-annotations-in-asp-net-mvc/扩展所需的IfRequired并将条件验证添加到数据注释中。 (你需要自己动手,我应该想一想,它可能会变得笨拙!)

  3. 尝试使用FluentValidation。 http://fluentvalidation.codeplex.com/(根据您的申请要求,这可能是一个不错的选择)。

  4. 希望这有帮助!