Опубликован: 24.01.2007 | Уровень: специалист | Доступ: платный
Лекция 4:

Настроечные параметры System.Web

Все запросы до передачи в расширение ISAPI aspnet.dll проходят через IIS. Если нужно, чтобы расширение файла интерпретировалось обработчиком, вы должны передать это расширение в расширение ISAPI aspnet.dll. Так следует зарегистрировать расширение .asbx в Internet Information Services.

  1. Откройте инструмент администрирования IIS.
  2. Перейдите в директорию или приложение, к которому нужно добавить это расширение.
  3. Сделайте щелчок правой кнопкой мыши на этом приложении или директории, а затем выберите Properties (Свойства).
  4. Появится экран как на рис. 4.1.
    Страница свойств приложения или виртуальной директории

    Рис. 4.1. Страница свойств приложения или виртуальной директории
  5. Щелкните на кнопке Configuration (Настройка). Появится окно (рис. 4.2).
    Страница настройки соответствий приложения

    Рис. 4.2. Страница настройки соответствий приложения
  6. Чтобы добавить в список соответствий новое расширение, щелкните на кнопке Add (Добавить). Появится окно (рис. 4.3).
    Страница настройки соответствий расширений

    Рис. 4.3. Страница настройки соответствий расширений
  7. Установите путь к файлу .dll ASP.NET ISAPI, который находится в папке
    <drive>:\%windir%\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
  8. В поле Extension (Расширение) введите .asbx и нажмите OK.

После передачи расширения в фильтр ASP.NET ISAPI нужно добавить обработчик в файл machine.config сервера.

<httpHandlers>
  <add verb="*" path="*.asbx" type="Microsoft.asbxHandler" / >
</httpHandlers>

Теперь все запросы с расширением .asbx будут обрабатываться собственным обработчиком. Чтобы дать вам лучшее представление обо всем процессе, приведу пошаговое описание короткой жизни HTTP-запроса.

  1. Пользователь запрашивает веб-страницу с веб-сервера.
  2. Запрос обрабатывается в IIS и направляется в расширение ISAPI ASP.NET.
  3. ASP.NET получает запрос и пропускает его через несколько модулей HTTP. (Далее я их опишу.)
  4. После того как запрос прошел через эти модули HTTP, он отправляется в собственный обработчик.
  5. Вызывается метод 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.

Таблица 4.11. Свойства <add>
Свойство Описание
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-модулем.

Таблица 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
Геннадий Щербаков
Геннадий Щербаков

В начале года получил код dreamspark  H4RQ9-QJ6FD-YJWJT-P6FVF-HGXQZ. При  его вводе- сообщение что он просрочен.