Класс HttpResponse инкапсулирует информацию ответа, полученного по протоколу передачи гипертекстовых файлов HTTP, притом информация содержится в операции ASP NET Каркас Framework использует данный класс при формировании ответа клиенту. Формирование ответа включает запись элементов управления сервера для отправки клиенту. Созданный вами код сервера может также использовать метод Write (Запись) объекта Response (Ответ). Использование метода Response: :Write (Ответ' Запись) иллюстрировалось уже несколько раз.
Метод Redirect (Переадресовать)
Класс HttpResponse имеет полезный метод Redirect (Переадресовать) Благодаря этому методу сервер может переадресовать запрос, передаваемый по протоколу передачи гипертекстовых файлов HTTP на другой унифицированный указатель информационного ресурса (URL). Простая переадресация, без передачи каких-либо данных, является тривиальной задачей. Все что для этого нужно сделать— это вызвать метод Redirect (Переадресовать) и передать ему требуемый унифицированный указатель информационного ресурса (URL) Примером ситуации, когда используется метод Redirect (Переадресовать), служит реорганизация Web-узла. В процессе реорганизации некоторые страницы могут содержать недостоверную информацию Кроме того, содержимое Web-узла может быть перемещено Чтобы сохранить доступ к старым страницам, достаточно просто переадресовать трафик
Обратите внимание, что при переадресации запроса всегда используется метод GET (Получить) протокола передачи гипертекстовых файлов HTTP Это подобно установлению связи по указанному унифицированному указателю информационного ресурса (URL) (Метод POST (Отправить почтовое сообщение) может использоваться, если данные отсылаются из формы, — тогда можно указать одно из двух действий — GET (Получить) или POST (Отправить почтовое сообщение)) Более интересный случай представляет передача данных на новую страницу. Один из способов передачи данных состоит в том, что передаваемая информация кодируется в строке запроса. При кодировании строки запроса следует придерживаться общепринятых соглашений для протокола передачи гипертекстовых файлов HTTP Класс HttpUtility имеет метод UrlEncode, который корректно кодирует отдельные составляющие элементы строки запроса Вам нужно самостоятельно написать код, который отделяет унифицированный указатель информационного ресурса (URL) от строки запроса при помощи символа "знак вопроса" (9), а также разделяет отдельные составляющие элементы строки запроса при помощи символа "амперсанд" (&).
В папке Hotel (Гостиница) имеется простое Web-приложение, где иллюстрируется использование этого метода передачи данных при переадресации запроса. Файл de fault. aspx содержит форму, при помощи которой собираются данные, необходимые для бронирования мест в гостинице Само бронирование выполняется на странице Reservationl. aspx. Чтобы получить доступ к начальной странице default. aspx, используйте унифицированный указатель информационного ресурса (URL)http://localhost/NetCpp/Hotel/.
Как обычно, ссылка на эту страницу содержится на начальной странице с примерами программ На Рисунок 10.14 показана начальная страница нашего приложения, которое бронирует место в гостинице
Ниже приведен ASP NET-код на C++, который выполняется после щелчка на кнопке Make Reservation (Забронировать)
void cmdMakeReservation_Click(
Object *sender, EventArgs *e)
{
HttpUtility *utility = new HttpUtility;
String *query = String:.Concat ( // Строка
"City=", utility->UrlEncode(txtCity->Text)); // Город
query = String::Format(
// запрос = Строка:: Формат ( "{0}&Hotel={l}",
query, utility->UrlEncode(txtHotel->Text));
query = String::Format(
// запрос = Строка:: Формат ( "{0}&Date={l}",
query, utility->UrlEncode(txtDate-XText));
query = String::Format( // запрос = Строка:: Формат ( "{0}&NumberDays={1}",
query, utility->UrlEncode(txtNumberDays->Text));
Response->Redirect(String::Concat(
// Ответ-> Переадресовать (Строка:: Concat (
"Reservation!.aspx?", query)); // запрос
}
Метод cmdMakeReservation_Click строит строку запроса. Эта строка присоединяется к унифицированному указателю информационного ресурса (URL) страницы Reservation! .aspx От унифицированного указателя информационного ресурса (URL) ее отделяет символ 9 В качестве разделителя элементов строки запроса используется символ & Для кодирования отдельных элементов используется метод HttpUtility: :UrlEncode Символы "слэш" (в дате) и пробелы, например в названии "San Jose" кодируются отдельно Если щелкнуть на кнопке, будет вызван метод Page_Load класса Reservationl, отображающий страницу, с помощью которой можно забронировать место в гостинице Этот метод считывает название города, название гостиницы, дату и количество дней, которое вы планируете провести в гостинице, а затем отображает полученные данные на возвращаемой Web-странице
void Page_Load(Object *sender, EventArgs *e)
{
Page *p = dynamic_cast<Page *>(sender);
// Страница *р = dynamic_cast <Страница *> (отправитель);
HttpRequest *request = p->get_Request();
HttpResponse *response = p->get_Response() ;
response->Write("Making reservation for ...");
// ответ-> Запись ("Делаю резервирование для ... "};
response->Write("<br>"); // ответ-> Запись
String *city = request->Params->get_Item("City");
// Строка *city = запрос-> Params-> get_Item ("Город");
response->Write(String::Concat("City = ", city));
// ответ-> Запись (Строка:: Concat ("Город = ", город));
response->Write("<br>"); // ответ-> Запись
String *hotel = request->Params->get_Item("Hotel");
// Строка *hotel = запрос-> Params-> get_Item ("Гостиница");
response->Write(String::Concat("Hotel = ", hotel));
// ответ-> Запись (Строка:: Concat
// "Гостиница = ", гостиница));
response->Write("<br>"); // ответ-> Запись
String *strDate = request->Params->get_Item("Date");
// Строка *strDate = запрос-> Params-> get_Item ("Дата");
response->Write(String::Concat("Date = ", strDate));
// ответ-> Запись (Строка:: Concat ("Дата = ", strDate));
response->Write("<br>"); // ответ-> Запись
String *strDays = // Строка
request->Params->get_Item("NumberDays" ) ;
response->Write(String::Concat(
// ответ-> Запись (Строка:: Concat ( "NumberDays = ", strDays));
response->Write("<br>"); // ответ-> Запись
}
Строку запроса можно увидеть в адресной строке броузера На Рисунок 10.15. показана выходная информация, выводимая броузером (На самом деле, наша программа не бронирует место в гостинице, она всего лишь выводит переданные ей параметры )
Включите трассировку Вывод трассировки продемонстрирует идеи, которые мы обсудили, когда говорили о программировании запросов и ответов в Web-программах В частности, стоит изучить коллекцию Query String, показанную на Рисунок 10.16.