2017-02-01 19 views
0

Web APIプロジェクトを作成していて、モデルに検証を追加したいので、DataAnnotation属性を追加しました。Web APIのデータ注釈が原因でサーバーエラーが発生する

私は別のmvcプロジェクトから私のオブジェクトを渡そうとしてプロジェクトをテストしました。 500台のサーバーエラーが発生しました。

DataAnnotationを削除すると、オブジェクトを正常に渡すことができます。どうして?

私はthisthisのようないくつかのチュートリアルを見てきましたが、検証エラーの処理方法を示していますが、これは役に立ちませんでした。

UPDATE

class1でMYPROPERTYからのデータ注釈、溶液Bを削除する(ただし、A液中にクラスでそれを残しては)値を正常に渡すことができることを意味します!これはオブジェクトを嫌うことで問題ですか?もしそうなら、私はどのようにそれを解決するのですか?

B =オブジェクト

Aオブジェクト

要求を受け取るためにresquest

public class Class1 
{ 
    [Required(ErrorMessage = "MyProperty value is required")]//remove this line to make it work 
    public int MyProperty { get; set; } 
    public Class2 MyOtherProperty { get; set; } 
} 

public class Class2 
{ 
    public string SomeProperty { get; set; } 
} 


    async Task<string> Test2() 
    { 
     var form = new Class1(); 
     form.MyProperty = 123; 
     form.Class2 = new Class2(); 

     using (HttpClient client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:58814/api/"); 
      var post = await client.PostAsJsonAsync<Class1>("Values", form); 
      var putt = await client.PutAsJsonAsync<Class1>("Values", form); 
     } 
     return ""; 
    } 

私のコードを送信するために私のコードを送信して=私のMVCプロジェクトをrecivingマイウェブサービス(適用されたブレークポイントはヒットしていません)

// POST api/values 
    public void Post([FromBody]Class1 value) 
    { 

    } 

    // PUT api/values/5 
    public void Put([FromBody]Class1 value) 
    { 
    } 
+0

にこの

public class Network { [Required(ErrorMessage = "NetworkID is required")] public int NetworkID { get; set; } } 

を変更することでした 'Class2'の定義は何ですか? –

+0

こんにちは私はクラス2の定義を追加しました、なぜそれが違いを生む可能性がありますか? – tony09uk

答えて

0

私はthis link - Scott Hanselman's blog

私からのアドバイスのおかげでプロジェクトを送信して、プロジェクトを受けるには(データ注釈を含む)は、同一のクラスを持っていた問題を解決しています。受信プロジェクトのクラスから注釈を削除するとバインディングの問題は解決されましたが、まだプロパティの検証が必要でした。また、アノテーションを必要なものからRangeに変更することでバインディングの問題も解決しました(私は試してデバッグするためにいくつかのステップを行っていたので、これだけを言います)。私にとって

最終的な解決策は、この

[DataContract] 
public class Network 
{ 
    [DataMember(IsRequired = true)] 
    public int NetworkID { get; set; } 
} 
関連する問題