webapi mvc4的必需注释对于整数属性失败,但适用于字符串

时间:2013-01-08 23:27:28

标签: jquery asp.net-mvc-4 annotations asp.net-web-api

当我进行ajax调用时,它会因500内部服务器错误而失败

Value-typed properties marked as [Required] must also be marked with [DataMember(IsRequired=true)]

问题在于CallerID属性。

[Required]
public string AccountTypeID { get; set; }

[Required]
public int CallerID { get; set; }

如果我将CallerID标记为字符串,则一切正常 有什么想法吗?

1 个答案:

答案 0 :(得分:5)

这是Web API中的一个已知问题,您可以在此处查看整个历史记录: http://aspnetwebstack.codeplex.com/workitem/270

基本上,如果将[Required]应用于值类型(例如bool或int,string不是值类型),则会导致此错误。

此外,您需要考虑它 - 您正在使int成为必需属性 - 但作为值类型,它将始终具有值,值= 0,即使它未被用户传递。也许你在想int?而不是?

您可以完全删除InvalidModelValidatorProvider(虽然可能无法接受):

config.Services.RemoveAll(
typeof(System.Web.Http.Validation.ModelValidatorProvider), 
v => v is InvalidModelValidatorProvider);

或者只是将DataContract应用于您的班级:

[DataContract]
public class MyClass {

[DataMember(isRequired=true)]
public string AccountTypeID { get; set; }

[DataMember(isRequired=true)]
public int CallerID { get; set; }
}

另一种解决方法是将int标记为可为空:

[Required]
public int? CallerID { get; set; }