我和你面临同样的问题,我认为这完全是胡说八道。对于值类型,我可以看到这[Required]
是行不通的,因为值类型的属性不能为空,但是当你有一个可以为空的值类型时,不应该有任何问题。但是,Web API 模型验证逻辑似乎以相同的方式处理不可空值和可空值类型,因此您必须解决它。我在Web 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; }
}