5

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を文字列としてマークすると、すべてが正常に機能します。
なぜ何かアイデアはありますか?

4

1 に答える 1

5

これはWebAPIの既知の問題であり、履歴全体をここで確認できます:http: //aspnetwebstack.codeplex.com/workitem/270

基本的に、[必須]を値型(boolやintなど、文字列は値型ではありません)に適用すると、このエラーが発生します。

また、それについて考える必要があり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; }
}

もう1つの回避策として、intをnull許容としてマークします。

[Required]
public int? CallerID { get; set; }
于 2013-01-09T00:34:41.700 に答える