Как зарегистрировать HttpHandler для всех вложенных папок в Asp.Net? - PullRequest
10 голосов
/ 02 апреля 2009

Я хотел бы зарегистрировать HttpHandler, чтобы включить все подпапки корневой папки независимо от того, как далеко они вложены. Я ожидал бы, что поведение с приведенным ниже кодом сделает именно это, но на самом деле он включает в себя только элементы непосредственно в корневой папке.

<httpHandlers>
  <add verb="*" path="root/*" type="HandlerType, Assembly" />
</httpHandlers>

Я, конечно, могу зарегистрироваться, как показано ниже, чтобы включить все, что является вторым уровнем, однако мне еще не удалось найти способ сказать что-нибудь ниже root.

<httpHandlers>
  <add verb="*" path="root/*/*" type="HandlerType, Assembly" />
</httpHandlers>

Это то, что беспокоило меня в течение долгого времени, и я хотел бы услышать о простом решении.

Я хотел бы уточнить, что когда я говорю «root», я не имею в виду корень приложения и не обязательно заинтересован в отправке всех запросов в приложении в модуль для обработки.

Ответы [ 4 ]

20 голосов
/ 18 июля 2011

Вам не нужен отдельный файл web.config. Используйте элемент в вашем основном файле web.config:

<!-- Configuration for the "root" subdirectory. -->
<location path="root">
  <system.web>
    <httpHandlers>
      <add verb="*" path="root" type="HandlerType, Assembly"/>
    </httpHandlers>
  </system.web>
</location>
6 голосов
/ 09 октября 2009

Вы можете создать web.config в этой «корневой» папке с путем = «*»

0 голосов
/ 06 февраля 2015

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

  • Поместите полный, оригинальный URL-адрес в Context.Items
  • Измените путь запроса на какое-нибудь фиктивное значение, расположенное непосредственно под папкой обработчика, в соответствии с конфигурацией обработчика.

Теперь будет вызван обработчик , который найдет фиктивный URL в запросе. Он игнорирует этот URL-адрес и обрабатывает фактический URL-адрес, который он найдет в Context.Items.

0 голосов
/ 03 апреля 2009

Возможно, вам следует использовать HttpModule вместо HttpHandler.

...