2009-04-02 2 views
9

중첩 된 위치에 관계없이 루트 폴더의 모든 하위 폴더를 포함하도록 HttpHandler를 등록하고 싶습니다. 아래 코드로 동작을 기대했지만 실제로는 루트 폴더에 직접 항목 만 포함합니다.Asp.Net의 모든 하위 폴더에 대해 HttpHandler를 등록하는 방법은 무엇입니까?

나는 물론 단지 루트 아래에 아무 말도 할 수있는 방법을 발생할 아직하지만, 두 번째 계층 아무것도를 포함하는 다음과 같이 등록 할 수 있습니다
<httpHandlers> 
    <add verb="*" path="root/*" type="HandlerType, Assembly" /> 
</httpHandlers> 

.

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

이것은 모자가 오랫동안 나를 괴롭혔던 간단한 솔루션입니다.

내가 "루트"라고 말하면 응용 프로그램의 루트를 의미하지는 않으며 응용 프로그램의 모든 요청을 처리 할 모듈로 보내지 않아도된다는 것을 분명히 밝히고 싶습니다.

답변

0

아마도 HttpHandler 대신 HttpModule을 사용해야합니다.

+0

물론 이것은 항상 옵션이지만 특정 폴더 아래의 모든 요청에 ​​대해서만 응용 프로그램의 모든 요청에 ​​대한 처리기가 필요하지 않습니다. 내 질문에 명확하지 않았을 수도 있습니다, "루트"나는 폴더 트리에서 해당 지점의 사이트의 루트를 의미하지는 않습니다. – 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

당신은 들어오는 모든 요청에 ​​대한 URL을 확인하는 HTTP 모듈를 만들 수 있습니다.

  • 바로 아래 몇 가지 더미 값으로 Context.Items에
  • 변경 요청 경로를 전체, 원래의 URL을 넣어 : 요청 URL이 폴더에있는 경우 당신은 당신의 핸들러가 처리하는, 이것이 수행 핸들러의 구성과 일치하는 핸들러의 폴더.

이제 호출자가 요청에서 더미 URL을 찾습니다. 이 URL을 무시하고 Context.Items에서 찾을 실제 URL을 처리합니다.

관련 문제