В начале года получил код dreamspark H4RQ9-QJ6FD-YJWJT-P6FVF-HGXQZ. При его вводе- сообщение что он просрочен.
|
Настроечные параметры System.Web
Все запросы до передачи в расширение ISAPI aspnet.dll проходят через IIS. Если нужно, чтобы расширение файла интерпретировалось обработчиком, вы должны передать это расширение в расширение ISAPI aspnet.dll. Так следует зарегистрировать расширение .asbx в Internet Information Services.
- Откройте инструмент администрирования IIS.
- Перейдите в директорию или приложение, к которому нужно добавить это расширение.
- Сделайте щелчок правой кнопкой мыши на этом приложении или директории, а затем выберите Properties (Свойства).
- Появится экран как на рис. 4.1.
- Щелкните на кнопке Configuration (Настройка). Появится окно (рис. 4.2).
- Чтобы добавить в список соответствий новое расширение, щелкните на кнопке Add (Добавить). Появится окно (рис. 4.3).
- Установите путь к файлу .dll ASP.NET ISAPI, который находится в папке
<drive>:\%windir%\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
- В поле Extension (Расширение) введите .asbx и нажмите OK.
После передачи расширения в фильтр ASP.NET ISAPI нужно добавить обработчик в файл machine.config сервера.
<httpHandlers> <add verb="*" path="*.asbx" type="Microsoft.asbxHandler" / > </httpHandlers>
Теперь все запросы с расширением .asbx будут обрабатываться собственным обработчиком. Чтобы дать вам лучшее представление обо всем процессе, приведу пошаговое описание короткой жизни HTTP-запроса.
- Пользователь запрашивает веб-страницу с веб-сервера.
- Запрос обрабатывается в IIS и направляется в расширение ISAPI ASP.NET.
- ASP.NET получает запрос и пропускает его через несколько модулей HTTP. (Далее я их опишу.)
- После того как запрос прошел через эти модули HTTP, он отправляется в собственный обработчик.
- Вызывается метод ProcessRequest обработчика, и пользователю отправляется ответ.
Этот процесс происходит каждый раз, когда запрашиваемый ресурс соответствует одному из зарегистрированных обработчиков.
Безопасность на основе расширений файлов
ASP.NET использует большое количество расширений, и многие из них должны оставаться невидимыми для пользователей. Расширения типа .config, .cs или .vb должны быть защищены так, чтобы пользователи не могли получить доступ к этим файлам и прочитать код или настроечные параметры. Это делается с помощью направления расширений в расширение ASP.NET IIS ISAPI, а затем – в System.Web.HttpForbiddenHandler. Данный обработчик отменяет запрос и возвращает код ошибки HTTP 403 "Доступ запрещен". Это очень эффективный способ защиты таких расширений от любых запросов. Вы можете использовать его для защиты любых собственных расширений файлов, которые нужно скрыть от пользователей, сопоставив свое расширение с обработчиком System.Web.HttpForbiddenHandler.
Ключевые моменты <httpHandlers>
ASP.NET на самом деле дает в ваши руки огромную мощь, когда дело доходит до работы с запросами HTTP и создания собственных обработчиков. Вот список ключевых моментов, связанных с разделом <httpHandlers>.
- Раздел <httpHandlers> позволяет добавлять, удалять и полностью очищать список соответствий обработчиков.
- Обработчики HTTP – это классы, которые реализуют интерфейсы обработчиков HTTP, такие как IHttpHandler, IHttpAsyncHandler и IHttpHandlerFactory.
- Вы можете создать собственные обработчики HTTP для обработки собственных типов файлов.
- Вы можете защитить файлы от доступа пользователями, добавив запись соответствия обработчика для расширения файла, которая сопоставит его с обработчиком HTTP HttpForbiddenHandler.
Работа с разделом <httpModules>
Модули HTTP – это компоненты, расположенные между средой выполнения HTTP ASP.NET и обработчиками HTTP. ASP.NET использует их для выполнения некоторых процедур, включая аутентификацию, авторизацию и управление сессиями. С помощью модулей HTTP можно выполнять действия с запросами или ответами HTTP при их передаче от IIS в обработчик и обратно. Кроме всего прочего, модули могут шифровать, сжимать, аутентифицировать или записывать потоки запросов и ответов.
С помощью раздела <httpModules> можно настроить модули HTTP по умолчанию, а также зарегистрировать свои собственные модули HTTP.
Добавление модуля
Раздел <httpModules> – это раздел настроек на основе коллекции. Возможно добавлять элементы в эту коллекцию, удалять их или полностью очищать коллекцию, как и в случае с другими разделами, основанными на коллекциях. Ниже приведен синтаксис добавления модуля в раздел <httpModules>.
<httpModules> <add type="class name" name="module name" /> </httpModules>
Свойства элемента <add> перечислены в табл. 4.11.
Свойство | Описание |
---|---|
type | Определяет класс модуля HTTP. |
name | Определяет имя модуля http, которое используется в случае необходимости удаления модуля. |
Удалить модуль HTTP можно с помощью следующей записи.
<httpModules> <remove name="module name" /> </httpModules>
Это полезно при реализации собственной аутентификации с использованием формы, так как легко удаляется модуль аутентификации с помощью формы по умолчанию и добавляется свой собственный.
Создание собственного модуля HTTP
Вы можете создать модуль для выполнения любых действий, начиная со сжатия ответа HTTP и заканчивая аутентификацией запроса HTTP. В этом примере вы создадите простой модуль, который добавляет в конец каждого запроса уведомление об авторских правах компании.
Сначала создается базовая структура класса. Давайте посмотрим на нее.
C#
using System; using System.Web; using System.Collections; public class CopyrightModule : IHttpModule { public void Init(HttpApplication application) { } public void Dispose() { } }
VB.NET
Imports System Imports System.Web Imports System.Collections Public Class CopyrightModule Implements IHttpModule Public Sub Init(ByVal application as HttpApplication) _ Implements IHttpModule.Init End Sub Public Sub Dispose() Implements IHttpModule.Dispose End Sub End Class
Это основа класса. Сначала класс реализует интерфейс IHttpModule, требующий методы Init и Dispose. Метод Init позволяет передать события HTTP в собственные обработчики событий. Метод Dispose позволяет удалять все соединения и ресурсы перед закрытием модуля. Возможно передать в метод Init несколько событий, каждое из которых возникает на различных стадиях процесса обработки запроса HTTP. В таблице 4.12 приведен перечень всех событий, которые можно связать с вашим HTTP-модулем.
Событие | Описание |
---|---|
AсquireRequestState | Возникает, когда ASP.NET получает текущее состояние текущего запроса. Используйте событие при изменении состояния запроса. |
AuthenticateRequest | Возникает, когда ASP.NET устанавливает личность пользователя, сгенерировавшего запрос. |
AuthorizeRequest | Возникает, когда ASP.NET проводит авторизацию пользователя. |
BeginRequest | Возникает, когда ASP.NET запускает процесс обработки запроса. Это первое доступное вам событие данного процесса. |
Disposed | Возникает, когда приложение HTTP удаляется. |
EndRequest | Это последнее событие в процессе обработки запроса в ASP.NET. |
Error | Возникает, когда приложение выбрасывает необработанное исключение. |
PostRequestHandlerExecute | Возникает, когда завершается выполнение обработчика HTTP ASP.NET. |
PreRequestHandlerExecute | Возникает непосредственно перед тем, как ASP.NET передаст запрос в обработчик HTTP. |
PreSendRequestContent | Возникает непосредственно перед тем, как ASP.NET отправит содержимое ответа пользователю. |
PreSendRequestHeaders | Возникает непосредственно перед тем, как ASP.NET отправит пользователю заголовки HTTP. |
ReleaseRequestState | Возникает после того, как ASP.NET закончит выполнение всех обработчиков запросов. Оно запускает модули состояния, записывающие текущее состояние данных. |
ResolveRequestCache | Возникает, когда ASP.NET завершает процесс авторизации. Затем оно запускает все имеющиеся модули кэширования для передачи кэшированных страниц вместо передачи запроса в обработчик. |
UpdateRequestCache | Возникает, когда ASP.NET завершает выполнение обработчика HTTP. Затем оно запускает все имеющиеся модули кэширования для кэширования ответа для будущих запросов. |
Все эти события доступны для собственных модулей HTTP. Давайте посмотрим, как добавлять события в собственный модуль HTTP. Первым шагом является передача события в метод Init.
C#
public void Init(HttpApplication application) { application.EndRequest += (new EventHandler(this.Application_EndRequest)); }
VB.NET
Public Sub Init(ByVal application as HttpApplication) Implements _ IHttpModule.Init AddHandler application.EndRequest, _ AddressOf Me.Application_EndRequest End Sub
Когда модуль инициализирован, событие EndRequest объекта Application передается в метод Application_EndRequest. Когда готов к отправке ответ, вызывается метод Application_EndRequest, модифицирующий ответ. Ниже приведен код, в котором данный метод модифицирует запрос.
C#
private void Application_EndRequest(Object source, EventArgs e) { HttpApplication application = (HttpApplication) source; HttpContext context = application.context; context.Response.Write("Copyright James Avery 2003"); }
VB.NET
Private Sub Application_EndRequest(ByVal [source] As [Object], _ ByVal e As EventArgs) Dim application as HttpApplication = CType([source], _ HttpApplication) Dim context As HttpContext = application.Context context.Response.Write _ ("Copyright James Avery 2003</body></html>") End Sub