当我进行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标记为字符串,则一切正常 有什么想法吗?
答案 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; }