2017-09-25 21 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);  
} 

여기서 내가 포스트 동기화를 호출하고 응답 본문을 저장하려고합니다.

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

web api 컨트롤러 및 웹 API 클라이언트 코드 (파일 및 메소드 이름 제외)를 제외한 나머지 3 개의 미리보기에 컨텍스트를 추가하십시오. 명확한 코드 구조는 독자가 코드를 이해하는 데 도움이됩니다. 제어 흐름이 세 번째 발췌 문장에 어떻게 도달하는지 이해할 수 없습니다. 공식 자습서로 연결되는 답변을 시작합니다. –

+0

제 3 발췌 문장에서 당신이 기대하는 것은 특히 나에게 불분명하다. 일반적으로 ASP.NET MVC 애플리케이션의 코드 리디렉션은 RedirectToAction()을 사용하여 수행됩니다. –

답변

1

당신은async 전화를 기다리고하지 있어 :

ASP.NET WebApi 프로젝트를 quickstarting 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