5

当我进行 ajax 调用时,它失败并出现 500 Internal server error

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 标记为字符串,则一切正常。
任何想法为什么?

4

1 回答 1

5

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

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

你也需要考虑一下——你正在创建int一个必需的属性——但作为一个值类型,它总是有值,value=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; }
于 2013-01-09T00:34:41.700 回答