global.asax에서 Server.MapPath ()를 어떻게 사용할 수 있습니까?


122

Server.MapPath().NET Framework에 저장하는 일부 파일 경로를 결합하는 데 사용해야 합니다 web.config.

그러나 Server.MapPath()현재 HttpContext에 의존하기 때문에 (제 생각에) 이것을 할 수 없습니다. 방법을 사용하려고 할 때 "사용 가능"하더라도 다음 예외가 발생합니다.

이 컨텍스트에서는 서버 작업을 사용할 수 없습니다.

와 같은 ~/App_Data/전체 물리적 경로에 웹 루트 상대 디렉토리를 매핑 할 수있는 또 다른 방법이 C:\inetpub\wwwroot\project\App_data\있습니까?

답변:


295

System.Web.Hosting.HostingEnvironment.MapPath ()를 시도 할 수 있습니다.

HttpContext가 필요하지 않습니다.


이 기술에 대한주의 사항이 있습니까?
John Bubriski

10
아니. Reflector를 실행하면 Server.MapPath 및 Request.MapPath가 궁극적으로 HostingEnvironment.MapPath를 호출하는 VirtualPath.MapPath를 궁극적으로 호출한다는 것을 알 수 있습니다. 그들은 모두 같은 장소에서 끝납니다. HostingEnvironment.MapPath는 중간 사람을 잘라냅니다.
Corbin March

1
+1 이것은 나를 위해 작동하는 오픈 소스 프로젝트를 수정 한 다음 HttpContext.Current.Server가 어떤 이유로 컨텍스트가 없어서 폭발하여 초기화를 중단했습니다. 이것으로 전환하면 다시 부드러운 항해로 돌아갑니다.
Chris Marisic 2011 년

4

null을 반환 할 수 AppDomain.CurrentDomain.BaseDirectory있기 때문에 사용하십시오 Context!!


1

Global.asax에서 컨텍스트 개체를 사용 합니다.

context.Server.mappath ()

컨텍스트를 사용하면 세션 컬렉션, 요청 개체, 응답 개체에도 액세스 할 수 있습니다. 예를 들어 오류를 기록 할 때 매우 유용합니다.


ContextGlobal.asax 에는 보장되지 않습니다 .
Anders Tornblad

-3

HttpContext.Current.Server.MapPath ( "/")를 시도해 볼 수 있습니다. 이전에 클래스에서 참조했던 방법입니다.


2
실제로 HttpContext가있는 클래스에서 그런 식으로 참조 할 수 있지만 global.asax에는 하나가 없다고 생각하므로 오류 메시지가 표시됩니다.
John Bubriski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.