2017-09-25 18 views
0

我有一個具有PostStudent方法的webApi。 API調用可以正常工作,並在數據庫中創建一個新學生,但是我無法讓它返回響應正文中的值。我試過返回Ok(newStudent)和Created(「〜/ api/poststudent」,newStudent),但他們都沒有返回我需要的newStudent值。如何使用postasync調用的響應?

我已經經歷了所有的響應,並且找不到實際的newStudent對象。它在那裏,我只是想念它,或者我有我的代碼有問題?

這是來自API的PostStudent方法;

var newStudent = new Student 
{ 
    studentId = nextStudentId, 
    studentFirstName = studentEntry.StudentFirstName, 
    studentLastName = studentEntry.StudentLastName, 
    studentDOB = studentEntry.StudentDob, 
    studentEmergencyContactName = studentEntry.StudentEmergencyContactName, 
    studentEmergencyContactNum = studentEntry.StudentEmergencyContactNum, 
    ticketNumber = studentEntry.TicketNumber 
}; 

db.Student.Add(newStudent); 

try 
{ 
    db.SaveChanges(); 
} 
catch (DbUpdateException) 
{ 
    if (StudentExists(newStudent.studentId)) 
    return BadRequest("That student id already exists"); 
    throw; 
} 
return Ok(newStudent.studentId); 
// return Created("~/api/poststudent", newStudent);  
} 

這是我調用postasync並嘗試保存響應正文的地方;

var response = client.PostAsync("api/poststudent", content); 
return response.Result.Content.ReadAsStringAsync().ToString(); 

而這就是我想要使用該值的地方;

var newStudentId = controller.PostStudent(studentFirstName, studentLastName, studentDob, ticketNumber); 
var url = "~/AddGuardian/AddGuardian/" + newStudentId; 
Response.Redirect(url); 

我希望有人能幫助我。我從來沒有想過重定向到另一個頁面會非常困難!

乾杯。

+0

請將上下文添加到這3個片段中,以顯示web api控制器和web api客戶端代碼除外 - 至少是文件和方法名稱。清晰的代碼結構可幫助讀者理解您的代碼我不明白控制流程如何達到第三小節。我開始鏈接到官方教程的答案。 –

+0

對於我來說,特別不清楚你期望從第三個片段中得到什麼。通常在ASP.NET MVC應用程序中重定向代碼是通過使用RedirectToAction()來完成的 –

回答

1

你不等待async電話:

var response = await client.PostAsync("api/poststudent", content); 
return (await response.Result.Content.ReadAsStringAsync()).ToString(); 
+0

我確實在那裏等待,但是由於某種原因掛起了。我只是將他們從沮喪中解救出來,但之後就開始工作了。 – Schming

+0

@Schming:刪除'await'關鍵字後開始工作?這似乎不太可能。但即使如此,那麼什麼是不工作? – David

+0

Nah我也不明白,雖然我對異步編程只有很新的東西。當我創建一個新學生時,數據庫將分配一個新的studentId。我想在重定向url中使用該id作爲參數。 – Schming

相關問題