4

컨트롤러 동작에서 WebRequest를 사용하여 수동으로 원격 URL로 양식을 보냅니다. 표시 할 html 페이지가 포함 된 WebResponse를받습니다. 이 응답을 작업의 응답 (HttpResponseBase 유형)으로 "붙여 넣기"를 원합니다. 액션은 일반적으로 ActionResult를 반환하므로 컨트롤러 응답을 결론 짓기 위해 WebResponse가 결과로 나타나게하려면 어떻게해야합니까?WebResponse to HttpResponseBase. 가능한가?

참고 : 브라우저의 URL도 응답의 URL이되어야합니다.

업데이트 : 여기에 목표가 있습니다. 이것은 페이팔 체크 아웃 페이지에 있습니다. 모든 장바구니 숨겨진 필드와 체크 아웃 제출 버튼이있는 양식 대신 내 작업 중 하나에 연결된 간단한 결제 버튼이 필요합니다. 이 작업에서는 양식으로 WebRequest를 준비하고 페이팔로 보내드립니다. 작업에서이 작업을 수행하면 비활성화 된 주문을 DB 테이블에 저장할 수 있으므로 주문 확인이 오면 저장된 주문과 비교하여 활성화 할 수 있습니다.

해결책 : POST로 리디렉션 할 수 없다고 대답 한 사람들에게 감사드립니다. POST로 페이팔로 리디렉션 할 의무가없는 것으로 보입니다. 대신 쿼리 문자열에있는 모든 장바구니 데이터가 포함 된 URL을 구성하고 리디렉션 할 수 있습니다. 제어기 조치 메소드에서이를 수행하면 보류중인 주.을 데이터베이스에 저장할 수 있습니다.

감사

답변

4

그냥 WebRequest 클래스 응답의 내용이, 당신은 당신의 행동 방식이 뭔가를 할 수있는 컨트롤러 액션의 응답에 다시 전송하려면 :

WebRequest req = WebRequest.Create("http://www.google.com"); 
WebResponse res = req.GetResponse(); 
StreamReader sr = new StreamReader(res.GetResponseStream()); 

ContentResult cr = new ContentResult(); 
cr.Content = sr.ReadToEnd(); 

return cr; 

이 더 간결합니다 :

WebRequest req = WebRequest.Create("http://www.google.com"); 
WebResponse res = req.GetResponse(); 

FileStreamResult fsr = new FileStreamResult(res.GetResponseStream(),res.ContentType); 

return fsr; 
+0

감사합니다 ... 다음은 SO 유사한 주제에 스레드를 참조하십시오. 문제는 콘텐츠가 충분하지 않다는 것입니다 (위의 업데이트 참조). 결과에는 헤더와 어쩌면 쿠키가 포함되어 있습니다. 방금 내용을 설정하면 모든 데이터가 사용되지 않습니다. 최종 결과는 브라우저의 URL이 올바르지 않습니다 (https : // ... paypal .../....와 같아야 함). 또한 지금은 내 테스트를 위해 페이팔 샌드 박스를 사용하고 있습니다. 같은 브라우저에서 샌드 박스에 로그인하더라도 페이팔 응답은 샌드 박스에 로그인하지 않은 것입니다. –

+0

PayPal에 익숙하지 않지만 왜 WebRequest를 사용하고 있습니까? 그들은 API가 있다고 가정합니다. 당신은 그것을 조사해야합니다. 내 솔루션에 관해서는 WebResponse의 쿠키 및 기타 헤더를 ​​사용자가 취한 조치의 응답으로 쉽게 복사 할 수 있습니다. – Matthew

0

이 작업은 직접 수행 할 수 없습니다. 나는 ASp.NET에 대해 많이 모른다. ARe 당신은 ASP.net 페이지가 원격 사이트에 HTTP 요청을하고 응답을 받고 있다고 말하면서 그 응답이 HTTPResponseBase가되기를 원합니 까? 그 후에는 무엇을하고 싶습니까?

How do I mock HttpResponseBase.End()?