Спонсор: Microsoft
Опубликован: 30.01.2013 | Доступ: свободный | Студентов: 1187 / 138 | Длительность: 17:23:00
Теги: .net, ajax, asp, www, интранет
Лекция 3:

Анатомия приложений ASP.NET

Служебные объекты ASP.NET

В некоторых ситуациях в процессе работы приложения требуется получать специфические данные о контексте исполнения. Например, необходимо работать с данными HTTP-запроса и HTTP-ответа, получать серверную информацию или оставлять отладочные данные. Обычно в других платформах для построения веб-приложений использовались переменные окружения. Для работы с этими данными в ASP.NET существует ряд служебных объектов ASP.NET, позволяющих выполнять указанные операции более удобно и безопасно.

Основными служебными объектами ASP.NET являются:

  • HttpContext;
  • Request;
  • Response;
  • Server;
  • Trace.

Объект HttpContext является "входной точкой" для получения доступа ко всем остальным объектам. Фактически, через этот объект можно получить всю информацию о текущем контексте исполнения. Обычно объект HttpContext используется за пределами страницы, т.к. страница также позволяет получить доступ к этим объектам. Для того, чтобы получить доступ к текущему контексту достаточно обратиться к статическому свойству Current класса HttpContext: "HttpContext.Current". При получении доступа к текущему контексту становятся доступны все остальные объекты с одноименными названиями свойств.

Объекты Request и Response отвечают за содержимое HTTP-запроса и HTTP-ответа.

Объект Request содержит все параметры URL, HTTP-заголовки и другую информацию, отправляемую клиентом. Кроме того, в этом объекте инкапсулируется информация о браузере клиента.

Объект Response описывает HTTP-ответ, который впоследствии отправляется клиенту. Используя объект Response можно модифицировать HTTP-ответ – выставлять коды возврата, перенаправлять пользователя на другую страницу, задавать заголовки HTTP-ответа или просто формировать содержимое, которое будет отправлено клиенту. Для помещения данных в выходной буфер используется метод Write класса Response. Таким способом пользуются при разработке собственных элементов управления или HTTP-обработчиков.

Например, давайте создадим фрагмент кода, который считывает адрес, по которому обратился пользователь и количество HTTP-заголовков в HTTP-запросе и сохраним их в HTTP-заголовках HTTP-ответа. Для этого у объектов Request и Response существует коллекция Headers.


Этот пример показывает, каким образом можно работать с объектами Request и Response.

Объект Server предоставляет вспомогательные методы и свойства, необходимые для функционирования веб-приложения. Основные методы и свойства объекта Server:

MachineName позволяет узнать имя компьютера;
HtmlEncode() и HtmlDecode() заменяет обычную строку строкой допустимых символов HTML, и наоборот;
UrlEncode() и UrlDecode() заменяет обычную строку строкой допустимых символов URL, и наоборот;
MapPath() преобразует относительный путь к файлу в рамках веб-приложения в абсолютный путь к файлу на диске (к примеру из "~/images/pic1.png" получается физический путь, например "C:\inetpub\wwwroot\images\pic1.png");
Transfer() передает исполнение другой веб-странице в текущем приложении.

Наконец объект Trace является универсальным объектом трассировки. Он позволяет записывать отладочную информацию в отладочный журнал на уровне страниц. Для отображения отладочной информации на уровне страницы необходимо задать значение атрибута Trace в директиве страницы равным значению True. Для этого необходимо открыть шаблон страницы (.aspx) и сделать необходимые изменения.


После выполнения этой операции при выполнении каждого запроса к этой странице после содержимого самой страницы будет отображаться отладочная информация. Пример отображения отладочной информации представлен ниже.

В составе этой отладочной информации содержится детальная информация о запросе, информация о трассировке, дерево элементов управления на странице, состояние сеанса (Session), состояние приложения (Application), содержание коллекции Cookie, HTTP-заголовки и другая полезная информация.

Также видно, что в рамках этой информации содержится раздел о выполняющихся событиях. Он позволяет отследить последовательность выполнения событий в рамках обработки запроса. Если нужно добавить свое событие в этот список, то можно воспользоваться объектом Trace. Для этих целей этот объект содержит два метода – Write и Warn. Оба этих метода добавят запись о своем выполнении. Отличие их состоит в том, что метод Write сделать обычную запись о выполнении события, а метод Warn также выделит эту запись красным шрифтом.

Например, можно написать следующий фрагмент кода, который добавляет информацию в список трассировки в момент создания объекта страницы и в момент обработки события Page Load.


Запустив страницу на исполнение при включенной трассировке можно увидеть следующий набор сообщений.

Таким образом, служебные объекты ASP.NET необходимы для получения и изменения служебной информации о текущем контексте исполнения.

Краткие итоги

В рамках среды исполнения ASP.NET существует ряд служебных объектов, которые позволяют получить доступ к различной служебной информации. К такой информации относятся данные об HTTP-запросе и HTTP-ответе, информация о сервере, трассировке и др. Доступ ко всем объектам можно получить либо через одноименные свойства страницы, либо через служебный объект HttpContext.

Зарезервированные папки

При разработке веб-приложения иногда требуется разместить специальные служебные файлы, которые не должны быть доступны для скачивания. Например, к таким файлам относятся файлы данных СУБД, файлы тем, файлы с программным кодом, файлы ресурсов и др. Если разместить подобные файлы за пределами папки с веб-приложением, то потребуется произвести ряд настроек для обеспечения прав доступа к этим папкам. Более того, такой подход не очень удобен с точки зрения администрирования такого приложения. Гораздо удобнее – размещать все необходимые файлы в папке с самим приложением. Однако, если пользователь будет иметь возможность скачать эти файлы по протоколу HTTP – это несомненная уязвимость в безопасности веб-приложения.

Для таких случаев можно создать специальные служебные папки в составе веб-приложения и запретить к ним доступ по протоколу HTTP. Это можно сделать, используя стандартные средства безопасности ASP.NET. Однако по неосторожности некоторые разработчики могут забыть это сделать, и это сделает приложение уязвимым (например, если пользователи скачают файл данных, потенциально они могут получить доступ к паролям всех пользователей веб-приложения). Поэтому в структуре проекта приложения ASP.NET существует ряд стандартных зарезервированных папок.

Зарезервированными папками являются обычные папки в составе проекта ASP.NET, которые, однако, имеют заранее предопределенные имена и содержат строго специфичную информацию. Основным отличием зарезервированных папок от остальных является невозможность загрузить их содержимое напрямую по протоколу HTTP.

К зарезервированным папкам относятся следующие папки:

Bin содержит все предварительно скомпилированные сборки .NET, используемые web-приложением ASP.NET;
App_Code содержит файлы исходного кода, которые не соотносятся с конкретными страницами;
App_GlobalResources содержит файлы глобальных ресурсов, которые доступны всем страницам web-приложения;
App_LocalResources содержит файлы локальных ресурсов, которые специфичны для каждой страницы web-приложения;
App_Data содержит файлы данных. Например, файлы SQL Server, текстовые файлы, XML и проч.;
App_Browsers содержит определения браузеров, которые определяет разработчик конкретного web-приложения;
App_Themes содержит файлы тем для оформления сайта

Для того, чтобы создать зарезервированную папку в составе проекта ASP.NET следует выбрать пункт меню "Add ASP.NET Folder" во всплывающем меню приложения.


После создания зарезервированной папки в структуре проекта ASP.NET, не требуется выполнять никаких дополнительных действий по ограничению доступа к этим папкам.

Краткие итоги

В структуре проекта ASP.NET можно создать ряд служебных папок, в которых будет содержаться информация служебного характера. К такой информации относятся файлы данных, программного кода, ресурсы, темы и др. Основным отличием зарезервированных папок является то, что их содержимое не доступно напрямую по протоколу HTTP.

Марина Воробьева
Марина Воробьева
Виктория Ткаченко
Виктория Ткаченко

Проигрыватель не работает. После нажатия кнопки Play ничего не происходит.

Владимир Романов
Владимир Романов
Россия, Москва, МПУ им Н.К. Крупской