source

http 컨텍스트를 사용하지 않고 응용 프로그램 경로를 가져옵니다.(asp.net )

factcode 2023. 9. 1. 21:22
반응형

http 컨텍스트를 사용하지 않고 응용 프로그램 경로를 가져옵니다.(asp.net )

어떻게 하는 거지?

사용 안 함:

HttpContext.Current.Server.MapPath

제가 http 컨텍스트를 필요로 하지 않고 통화할 수 있는 비슷한 기능이 기능이 있나요?

예를 들어 스레드가 어떤 작업을 시작하면 http 컨텍스트를 사용할 수 없지만 앱 경로를 가져와야 합니다.그리고 아니요, 컨텍스트를 인수로 전달하거나 공유 변수에서 읽을 수 없습니다.

속성을 사용합니다.

몇 가지 옵션이 있습니다.

Http 런타임.AppDomainAppPath

    WebApplication     -> Web root folder
    UnitTest           -> ArgumentNullException
    ConsoleApplication -> ArgumentNullException

AppDomain.현재 도메인.기본 디렉터리

    WebApplication     -> Web root folder
    UnitTest           -> ...\AppDir\bin\Debug
    ConsoleApplication -> ...\AppDir\bin\Debug

호스팅 환경.어플물리적 경로

    WebApplication     -> Web root folder
    UnitTest           -> null
    ConsoleApplication -> null

AppDomain을 사용하는 것을 추천합니다.현재 도메인.모든 유형의 프로젝트에서 사용할 수 있고 설정할 수 있기 때문에 기본 디렉토리입니다.

예를 들어 웹 루트 폴더를 AppDomain으로 가리키도록 UnitTest BaseDirectory를 설정할 수 있습니다.현재 도메인.명령별 기본 디렉터리:

AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");

일부 전자 메일 알림에서 제공할 URL(웹 응용 프로그램의 영구 링크)을 계산하는 방법을 찾을 때 이 질문을 우연히 발견했습니다.

이것들은 다른 스레드에서 생성되었습니다.HttpContext사용할 수 없었고 이메일을 생성하는 데 사용되는 큐 테이블에 URL 관련 정보를 넣는 것을 피하고 싶었습니다.

코드:

public static String GetCurrentAppDomainBasePath(String prefix = "http://")
{
   return String.Format("{0}{1}{2}", 
      prefix,
      System.Net.Dns.GetHostEntry("").HostName, 
      System.Web.HttpRuntime.AppDomainAppVirtualPath
   );
}

함수는 다음과 같은 전체 가상 경로를 반환합니다.http://full-host-name/AppName물론 몇 가지 제한 사항이 있습니다. 하드코딩 프로토콜(httphttps 등) 및 사용hostname대신에domain name(단일 컴퓨터에 여러 도메인이 정의된 경우에만 적용됨).

언급URL : https://stackoverflow.com/questions/2409540/get-application-path-without-using-httpcontext-asp-net

반응형