WebResponse для HttpResponseBase. Является ли это возможным? - PullRequest
4 голосов
/ 11 ноября 2009

В действии контроллера я вручную отправляю форму на удаленный URL с помощью WebRequest. Я успешно получил WebResponse, содержащий HTML-страницу для отображения. Я хотел бы «вставить» этот ответ в качестве ответа (типа HttpResponseBase) действия. Действие обычно возвращает ActionResult, так как мне завершить действие моего контроллера, чтобы результатом стал WebResponse?

Примечание. URL-адрес в браузере также должен стать URL-адресом ответа.

Обновление : вот цель. Это на странице оплаты PayPal. Вместо того, чтобы иметь форму со всеми скрытыми полями корзины и кнопку подтверждения оформления заказа, я бы хотел, чтобы простая кнопка оформления заказа была связана с одним из моих действий. В этом действии я подготовлю веб-запрос с формой и отправлю его в PayPal. Выполнение этого в действии также позволяет мне сохранять неактивированный заказ в таблице БД, чтобы при получении подтверждения заказа я мог сравнить его с сохраненным заказом и активировать его.

Решение : спасибо тем, кто ответил, что указал, что перенаправить его с помощью POST невозможно. Похоже, что я не обязан перенаправить на PayPal с POST. Вместо этого я могу создать URL со всеми данными корзины в строке запроса и перенаправить на него. Выполнение этого из метода действия контроллера все еще позволяет мне сохранять отложенный ордер в базе данных.

Спасибо

Ответы [ 2 ]

4 голосов
/ 11 ноября 2009

Если вы просто хотите, чтобы содержимое ответа 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 голосов
/ 11 ноября 2009

Нет прямого способа сделать это. Я не знаю много об ASp.NET. A Вы говорите, что ваша страница ASP.net выполняет HTTP-запрос к удаленному сайту и возвращает ответ, и вы хотите, чтобы этот ответ стал HTTPResponseBase? Что ты хочешь с этим делать после этого?

Смотрите следующую тему SO на похожую тему ... Как мне издеваться над HttpResponseBase.End ()?

...