私はあなたと同じ問題に直面しています、そしてそれは完全にナンセンスだと思います。値型では[Required]
、値型プロパティをnullにできないため、これは機能しないことがわかりますが、null許容値型がある場合は、問題は発生しないはずです。ただし、Web APIモデル検証ロジックは、null許容値とnull許容値の型を同じように処理するように見えるため、回避する必要があります。Web APIフォーラムで回避策を見つけ、それが機能することを確認できます。null許容の値型プロパティValidationAttribute
ではなく、サブクラスを作成して適用します。RequiredAttribute
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
public class NullableRequiredAttribute : ValidationAttribute, IClientValidatable
{
public bool AllowEmptyStrings { get; set; }
public NullableRequiredAttribute()
: base("The {0} field is required.")
{
AllowEmptyStrings = false;
}
public override bool IsValid(object value)
{
if (value == null)
return false;
if (value is string && !this.AllowEmptyStrings)
{
return !string.IsNullOrWhiteSpace(value as string);
}
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var modelClientValidationRule = new ModelClientValidationRequiredRule(FormatErrorMessage(metadata.DisplayName));
yield return modelClientValidationRule;
}
}
使用中のNullableRequiredAttribute:
public class Model
{
[NullableRequired]
public int? Id { get; set; }
}