2009-04-02 3 views
9

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

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

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

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

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

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

ответ

0

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

+0

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

6

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

+1

Это отличная идея, хотя в моем случае я имею дело с URL-адресом, который не соответствует папке. – YonahW

19

Вам не нужен отдельный 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> 
+0

Это довольно круто. Никогда не знал об этом элементе, спасибо за обмен. – YonahW

+0

Это сделало трюк! Большое спасибо! – Allov

+0

Это должен быть полностью принятый ответ! – ssougnez

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^