2009-04-02 10 views
9

Chciałbym zarejestrować HttpHandler, aby uwzględnić wszystkie podfoldery folderu głównego, niezależnie od tego, jak daleko są zagnieżdżone. Spodziewałbym się zachowania z poniższym kodem, aby to zrobić, ale w rzeczywistości zawiera tylko elementy bezpośrednio w folderze głównym.Jak zarejestrować HttpHandler dla wszystkich podfolderów w Asp.Net?

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

mogę zarejestrować się jako oczywiście poniżej obejmować niczego, co jest druga kondygnacja, jednak jeszcze spotkać sposób, aby po prostu powiedzieć niczego poniżej korzenia.

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

To jest coś, co od pewnego czasu mnie dręczy i chciałbym usłyszeć o prostym rozwiązaniu.

Chciałbym wyjaśnić, że kiedy mówię "root", nie mam na myśli źródła aplikacji i niekoniecznie jestem zainteresowany przesłaniem wszystkich wniosków w aplikacji do modułu, który ma zostać przetworzony.

Odpowiedz

0

Może powinieneś użyć HttpModule zamiast HttpHandler.

+0

Jest to oczywiście zawsze opcja, ale nie potrzebuję programu obsługi dla wszystkich żądań w aplikacji tylko dla wszystkich żądań pod określonym folderem. Mógłbym być niejasny w moim pytaniu, przez "root" nie mam na myśli root'a strony tylko tej gałęzi w drzewie folderów. – YonahW

6

Można tworzyć web.config w tym folderze "root" z path = "*"

+1

to świetny pomysł, chociaż w moim przypadku mam do czynienia z adresem URL, który nie pasuje do folderu. – YonahW

19

Nie trzeba osobnego pliku web.config. Użyj < Location> element podstawowego 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

To całkiem fajne. Nigdy nie wiedziałem o tym elemencie, dzięki za udostępnienie. – YonahW

+0

To wystarczy! Wielkie dzięki! – Allov

+0

To powinno być całkowicie akceptowaną odpowiedzią! – ssougnez

0

Można by utworzyć http moduł który sprawdza adres URL dla każdego żądania przychodzące. Jeśli URL żądania w dowolnym folderze chcesz, aby Twój obsługiw obsłudze, robi to:

  • Umieścić pełny, oryginalny adres URL w Context.Items
  • zmienić ścieżkę żądania do pewnego fikcyjnego wartości bezpośrednio poniżej folder obsługi, dopasowany do konfiguracji programu obsługi.

Teraz zostanie wywołana nazwa handlera , a w żądaniu zostanie znaleziony sztuczny adres URL. Ignoruje ten adres URL i przetwarza rzeczywisty URL, który znajdzie w pliku Context.Items.

Powiązane problemy