2010-08-05 5 views
0

나는 우수한 IIS7 다시 쓰기 모듈 (V2)을 사용하고 있으며 실제 파일의 존재 여부에 따라 다르게 다시 작성하는 사용자 지정 RewriteProvider를 만들고 싶습니다.IIS7 다시 쓰기 공급자에서 MapPath를 사용하는 방법은 무엇입니까?

나는 성공적이 튜토리얼에서와 같이 공급자를 만들었습니다 http://learn.iis.net/page.aspx/804/developing-a-custom-rewrite-provider-for-url-rewrite-module/

그러나, 정말 실제 경로로 URL을 매핑 할 수 있어야합니다 - 나는 일반적으로 HttpContext.Current.Server를 통해이 작업을 수행 할 것입니다. MapPath() 또는 HostingEnvironment.MapPath()하지만 HttpContext가 초기화되지 않은 것 같습니다 (ReWrite 모듈은 기본 코드이므로 적어도 현재 App Domain 내에서는이 정보를 얻을 수있는 곳에서 작업하는 데 어려움을 겪고 있습니다.).

이 문제를 해결하기 위해 내 자신의 다시 쓰기 모듈을 만들려고하지 않아도됩니다. 누군가 내게 어떤 단서를 가지고 있습니까?

감사합니다. 마크.

답변

1

코드가 ASP.NET이 사용하는 것과 다른 AppDomain에서 실행되기 때문에 이러한 API를 사용하여 액세스 할 수 없습니다.

이 작업을 수행하는 유일한 방법은 확장에 실제 경로가 포함 된 올바른 서버 변수를 전달하고 Path.Combine()을 직접 수행하는 것입니다.

그래서 당신은 YourProvider라는 확장자를 가진 가정이 같이 어떻게 든 호출됩니다 : {YourProvder : {URL}} 당신이 할 수있는

: {YourProvder : {APPL_PHYSICAL_PATH} | {URL} }

이제 실제 경로와 URL을 파이프로 구분할 수 있습니다. URL이 외부 사용자의 제어에 있으므로 물리적 경로를 먼저 전달해야합니다. 다른 사용자가 속임수를 사용하여 다른 실제 경로를 얻는 것을 원하지 않기 때문입니다.

+0

감사합니다. 저는 방금 MapPath()의 DirectoryEntry 버전을 작성하는 데 하루 반을 보냈습니다. 해결책은 훨씬 깔끔합니다! 그러나 한 가지는 APPL_PHYSICAL_PATH 변수가 URL 시작 위치를 알려주지 않았지만 PATH_TRANSLATED 변수가 실제로 IIS 7.0의 실제 경로에 직접 매핑되는 것처럼 보입니다. – Kram

관련 문제