2016-12-06 75 views
0

我是web API的新手。我想要的Student{ID, Name, Age}對象發佈到這個操作方法在API控制器:無法將複雜對象發佈到Web API?

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

studentsList<Student>

在提琴手我在一個JSON格式像這樣發送POST請求的API :

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

我將Content-Type指定爲application/json。

但執行此請求不會添加數據?

編輯

Student類:

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

這是ApiController:

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

「學生」只是我提到的三個屬性('ID','Name','Age')的簡單類。我設置了一個缺點(我不知道我可以用API和Fiddler做到這一點,謝謝!)對象已成功接收,流程進入「Add」方法,但請求GET不顯示新對象,我爲'Student'類添加了代碼並且添加了GET操作 –

+0

您是否實際上擊中了控制器?如果沒有,那麼你需要驗證你的對象格式正確。 我建議將PostStudent中的傳入類型更改爲「動態」。通過這種方式,您可以檢查到達的內容並確認它與您認爲正在發送的格式相符。 – Monza

回答

2

根據您最後的評論:

請記住,API控制器爲每個請求重新創建s 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

列表是'靜態',我想這將允許get從相同的實例中檢索它仍然假設請求來自同一個客戶端。 – JanR

+1

它可能適用於此示例,但在現實世界中,您會將數據保存在某種數據庫中。與視頻中的示例一樣,無法確保數據以任何有意義和可靠的方式持續存在。如果應用程序曾經重新啓動它不見了,如果一個新的控制器實例被創建(由另一個客戶端)它已經消失等等。 – JanR

相關問題