2011-03-31 2 views
2

나는 다음과 같이 설정 파일 구조를 가지고있다. 파일 폴더에 저장해야합니다. 이것이 우리 클라이언트의 프로덕션 서버가 설정되는 방법이며 변경할 수 없습니다.은 서버 루트 및 MapPath를()

나는 _page.Server.MapPath("/files")을 수행하지만 나에게 InvalidOperationException과 경로 '/ 파일'매핑 실패를 표시합니다.

UPDATE :

는 그래서이 방법의 MapPath를을 ("/")를 설정해야합니다. 내 로컬 asp.net 서버가 MapPath 그런 식으로 처리 할 수 ​​없지만 IIS 개발 상자에 문제가 없으며 잘 작동합니다. 흥미 롭 군. 파일에 저장하려면 어떻게해야합니까?

답변

4

저는 믿습니다 asp.net 2.0 이상에서 가상 디렉터리의 디렉터리 구조 외부로 이동하는 것은 보안 위반입니다. 디렉토리에 가상 디렉토리를 만들어 사용해야합니다.

+0

+1 IIS에서 AspEnableParentPaths 속성을 true로 설정하려면 http://msdn.microsoft.com/en-us/library/ms524697%28v=vs.90%29.aspx를 참조하십시오. – BrokenGlass

0

_page.Server.MapPath()은 응용 프로그램 루트 (서버의 루트가 아님)에서 매핑을 시도합니다.

시도 _page.Server.MapPath("../files").

편집

응용 프로그램 루트 이외의 매핑 할 때 당신은 보안 문제로 실행할 수 있습니다. 이런 경우, 당신은 같은 것을 할 수 있습니다 본질적으로

Server.MapPath("~").Substring(0, Server.MapPath("~").IndexOf(VirtualPathUtility.ToAbsolute("~").Replace("/", "\"))) + "\files" 

이 다소 복잡한 보이지만은 "다음 끝에서 응용 프로그램 루트를 제거하고 추가, '\ 파일'을 대신 내 응용 프로그램을지도"를 말한다.

0

반환 된 폴더 안에있는 지와 상관없이 서브 디렉토리에있는 정확하지 않게

_page.Server.MapPath("files") 
+0

필자는 자신의 응용 프로그램 내부에있는 파일 디렉토리를 찾습니다 (하지만 응용 프로그램 루트 외부에 있음). – Ender

+0

여전히 C : \ applicationRoot \ files \ "실제 경로를 제공합니다." – cdub

2

사용이

Server.MapPath("~/files") 

(가) ~ 웹 응용 프로그램의 루트를 나타냅니다보십시오.

+0

~에 대해서는 정확하지만 그의 구조와 일치하지 않습니다. 파일 디렉토리가 응용 프로그램의 루트 밖에 있습니다. – Ender