2016-12-06 14 views
0

私はWeb APIの初心者です。私は、APIコントローラでこのアクションメソッドにStudent{ID, Name, Age}のオブジェクトを投稿しようとしている:複雑なオブジェクトをWeb APIにPOSTできませんか?

public void PostStudent([FromBody]Student student) //I omitted FromBody attr but it doesn't help 
{ 
    students.Add(student); 
} 

studentsは、私はこのようなJSON形式でAPIにPOSTリクエストを送信シオマネキでList<Student>

です:

{ 
    "ID": 454, 
    "Name": "Tamara", 
    "Age": 15 
} 

私はapplication/jsonとしてもContent-Typeを指定しています。

このリクエストを実行してもデータは追加されません。

EDIT

Studentクラス:あなたの最後のコメントに基づいて

public class DefaultController : ApiController 
{ 
    List<Student> students = new List<Student> 
    { 
     new Student { ID=1, Name="Rami", Age=67}, 
     new Student { ID= 2, Name="Nermeen", Age=44 }, 
     new Student { ID= 3, Name="Ashraf", Age= 30} 
    }; 
    public List<Student> GetStudents() 
    { 
     return students.ToList(); 
    } 
    public Student GetOne(int id) 
    { 
     return students.Find(s => s.ID == id); 
    } 
    //[ResponseType(typeof(Student))] 
    public void PostStudent(Student student) 
    { 
     students.Add(student); 
    } 
} 
+0

「Student」C#クラスはどのように見えますか?コントローラにブレークポイントを設定すると、コントローラに投稿するときにブレークポイントに当たってしまうのは間違いありませんか? – JanR

+0

'Student'は私が言及したように(' ID'、 'Name'、' Age')の3つのプロパティの単なるクラスです。私はオブジェクトが正常に受信されたばかりのBreackpointを設定しました(私はAPIとFiddlerでこれを行うことができませんでした)。フローは 'Add'メソッドに行きますが、GETを要求すると新しいオブジェクトは表示されません。私は 'Student'クラスとGETアクションのコードを追加しています –

+0

あなたは実際にコントローラに当たっていますか?そうでない場合、オブジェクトが正しくフォーマットされていることを確認する必要があります。 PostStudentの受信タイプを「動的」に変更することをお勧めします。こうすることで、到着したものを調べ、送信していると思われるフォーマットに一致することを確認できます。 – Monza

答えて

2

APIコントローラがあることに注意してください、これはApiControllerある

public class Student 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public int Age { get; set; } 
    } 

各リクエストごとに再作成oコントローラ上のプロパティにデータを追加するだけでは、データは保持されません。要求のライフサイクルはここをクリックしてください:https://www.asp.net/mvc/overview/getting-started/lifecycle-of-an-aspnet-mvc-5-application

データを保持するシングルトンクラスを作成するか、データベースに保存することで、永続化することができます。

+0

私はそれについても考えましたが、このチュートリアルでは、https://youtu.be/GbKBcDX8DDQ?list=PL6n9fhu94yhW7yoUOGNOfHurUE6bpOO2b&t=383彼は彼の例では –

+1

という同じアプローチを使用しました。リストは 'static'です。依然として同じクライアントからの要求であると仮定して、同じインスタンスから要求を取得します。 – JanR

+1

この例ではうまくいくかもしれませんが、現実のシナリオでは、データをある種のデータベースに保存します。ビデオの例のように、データが意味を持ち信頼できる方法で永続化されることを保証する方法はありません。アプリケーションを再起動する必要があった場合は、新しいインスタンスのコントローラが(別のクライアントによって)作成された場合などには消えてしまいます。 – JanR

関連する問題