Ответ 1
Я столкнулся с той же проблемой, что и вы, и я думаю, что это полная глупость. С типами значений я вижу, что [Required]
не работает, поскольку свойство с типом значений не может быть нулевым, но когда у вас есть тип значения с нулевым значением, не должно быть никаких проблем. Однако логика проверки модели Web API, по-видимому, относится к типам с нулевым и нулевым значениям таким же образом, поэтому вам придется обойти это. Я нашел обход в форуме веб-API и могу подтвердить, что он работает: создайте подкласс 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; }
}