私はあなたと同じ問題に直面している、と私はそれが完全にナンセンスだと思います。値型では、値型のプロパティをnullにすることはできないので、[Required]
は機能しませんが、NULL値型がある場合は、にはを指定しないでください。しかし、Web APIモデル検証ロジックは、nullableでもnull値でもない値の型を同じ方法で扱うようです。そのため、回避する必要があります。私はWeb API forumに回避策発見し、それが動作していることを確認することができます:ValidationAttribute
サブクラスを作成し、null入力可能値型付けされたプロパティに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; }
}
私はこの質問を投稿してからしばらくして、実際にあなたが提案したことをやってしまったが、私はまだWeb APIがこのように動作する理由を理解できない。 – jorgehmv
@jorgehmv誰かが私に違和感を感じるまで、 – aknuds1
これはWebApi 2リリースでは問題になりません。バグは修正されているようです。何か問題があれば、正しいエラーメッセージを返すためにRequiredの値が不足しているときに、ViewModelの属性をnullにできるようにしなければならないと迷惑を掛けています。 –