2017-09-25 2 views
0

私はPostStudentメソッドを持つwebApiをセットアップしました。 APIコールは正常に動作し、DBに新しい学生を作成しますが、レスポンスボディの値を返すことはできません。私は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クライアントコード(ファイルとメソッド名)からの例外を示すコンテキストを追加してください。明確なコード構造は、読者がコードを理解するのに役立ちます。私はコントロールフローが第3のスニペットに達する方法を理解していません。私は公式のチュートリアルにリンクして回答を始めます。 –

+0

3番目のスニペットから期待していることは、私には特に不明です。通常、ASP.NET MVCアプリケーションのコードのリダイレクトは、RedirectToAction()を使用して行われます –

答えて

1

あなたはasync呼び出しを待っていないている:

ASP.NET WEBAPIプロジェクトをクイックスタートで2つの公式のチュートリアルがあります
var response = await client.PostAsync("api/poststudent", content); 
return (await response.Result.Content.ReadAsStringAsync()).ToString(); 
+0

私はそこに待っていましたが、何らかの理由でぶら下がっていました。私は欲求不満から取り除いただけですが、それ以降は仕事が始まりました。 – Schming

+0

@Schming: 'await'キーワードを削除した後で動作し始めましたか?それはそう思わない。しかし、その場合でも、動作していないものはありますか? – David

+0

Nah私はそれを理解していませんでしたが、私は非同期プログラミングにはまったく新しいものです。新しい生徒を作成すると、dbは新しいstudentIdを割り当てます。そのIDをリダイレクトURLのパラメータとして使用したいと思います。 – Schming

0

私はこれらを介して動作することをお勧めします。アプリケーションで問題が発生していることがわかった場合は、アプリケーションをこれらのサンプルに合わせて修正してください。あなたの要件がサンプルに記載されているものと異なる場合、あなたの質問でこれを強調することができます。

関連する問題