2015-12-01 55 views
1

我現在有一個通過提琴手發佈記錄的問題。我的代碼如下:無法通過提琴手發佈新記錄

[HttpPost] 
public void AddStudent(Student s) 
{ 
    SqlConnection myConnection = new SqlConnection(); 
    myConnection.ConnectionString = @"Data Source=PALLAVI-PC\SQLEXPRESS;Initial Catalog=StudentDB;Integrated Security=True;MultipleActiveResultSets=True;"; 

    SqlCommand sqlCmd = new SqlCommand(); 
    sqlCmd.CommandType = CommandType.Text; 
    sqlCmd.CommandText = "INSERT INTO Tbl_Students (Roll_Number,FirstName,LastName,Class,Gender) Values (@Roll_Number,@FirstName,@LastName,@Class,@Gender)"; 
    sqlCmd.Connection = myConnection; 

    sqlCmd.Parameters.AddWithValue("@Roll_Number", s.Roll_Number); 
    sqlCmd.Parameters.AddWithValue("@FirstName", s.FirstName); 
    sqlCmd.Parameters.AddWithValue("@LastName", s.LastName); 
    sqlCmd.Parameters.AddWithValue("@Class", s.Class); 
    sqlCmd.Parameters.AddWithValue("@Gender", s.Gender); 

    myConnection.Open(); 
    int rowInserted = sqlCmd.ExecuteNonQuery(); 
    myConnection.Close(); 
} 

當我在fiddler上運行這個,我得到一個NullException。響應主體不被代碼排除。響應主體採用JSON格式。圖片如下:

enter image description here

編輯 這是我得到的錯誤(圖像)。

enter image description here

+1

嘗試使用'公共無效AddStudent([FromBody]學生s)' – Marusyk

+0

您是否能夠調用服務時提出的請求是從提琴手?當您的API試圖處理 – Baskar

+1

時,請檢查是否有任何異常由於您沒有使用存儲過程(我建議),因此您應該仔細閱讀關於AddWithValue的這篇文章。它有時會通過像這樣的參數化查詢來獲取數據類型錯誤。 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ –

回答

1

要強制網絡API從請求主體讀簡單類型,在[FromBody]屬性添加到參數:

public void AddStudent([FromBody]Student s) 

在這個例子中,網絡API將使用的媒體類型的格式與r從請求主體請求名稱的值。這是一個示例客戶端請求。

POST http://localhost:5076/api/values HTTP/1.1 
User-Agent: Fiddler 
Host: localhost:5076 
Content-Type: application/json 
Content-Length: 7 

"{Students}" 

當一個參數具有[FromBody],網絡API使用Content-Type頭,選擇格式化。在這個例子中,內容類型是「application/json」,而請求主體是一個原始的JSON字符串(不是JSON對象)。

+1

謝謝。用[FromBody]設置參數。現在工作。 –

+0

很高興有幫助 – Marusyk

2

我將設置Content-Type頭,以及在提琴手

內容類型:應用/ JSON

+0

謝謝。在Fiddler中設置content-Type。成功了! –