ASP 응용 프로그램이 로컬에서 실행 중인지 확인하는 권장 방법이 있는지 알고 싶습니다. 현재 Request 개체를 사용하고 서버 변수에서 localhost 또는 127.0.0.1에 대한 문자열 검색을 수행하지만 몇 가지 제한 사항이 있습니다. 가장 큰 것은 Request 객체가 필요할 때 항상 사용할 수있는 것은 아니라는 것입니다.
답변:
HttpRequest.IsLocal을 참조하십시오.
bool isLocal = HttpContext.Current.Request.IsLocal;
이것은 Application_Start와 함께 저에게 효과적이었습니다.
if (!HostingEnvironment.IsDevelopmentEnvironment)
{
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
}
IsDevelopmentEnvironment가 설정되는 방법에 대한 자세한 내용은 다음 스레드를 참조하십시오.
ASP.NET에서 HostingEnvironment.IsDevelopmentEnvironment의 값을 결정하는 것은 무엇입니까?
Request.IsLocal은 127.0.0.1 또는 :: 1을 확인하는 것과 동일합니다. 이 게시물을 참조하십시오 : http://forums.asp.net/p/1065813/4081335.aspx .
IsLocal
또한 동일한 시스템에서 IIS 사이트를 방문 할 때를 나타냅니다. 이렇게하면 로컬 시스템에서 들어올 때 기본적으로 YSOD 세부 오류 메시지도 표시됩니다.
HttpContext.Current가 null이 아닌 경우 사용
HttpContext.Current.Request.IsLocal
그렇지 않으면 예를 들어 App_Start에서 또는 HttpContext.Current를 사용할 수 있기 전에 테스트 할 수 있습니다.
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
또는 PC의 전용 디스크.
또 다른 방법은 프로덕션에서 설정된 상수 컴파일 변수를 사용하는 것입니다 (예 : Azure 및 visualstudio.com에서 사용하는 경우).
더럽지 만 작동합니다.
이 스레드의 다른 답변에 대한 @Meh Men의 의견에 대한 응답으로, 누가 질문했습니다.
Request가 null 인 경우는 어떻습니까? 즉 : Application_start?
웹 사이트의 프로덕션 및 테스트 또는 "동종"버전이 모두 웹 사이트의 릴리스 버전과 함께 배포되고 로컬 환경이 "디버그"모드에서 빌드 및 개발 될 것이라고 확신하는 경우 #if DEBUG
신택스를 사용하여 다음을 수행 할 수 있습니다. 로컬로만 실행되어야하는 코드를 작성하고,이 블록 외부 또는 일치하는 #else
블록 내부에서도 로컬이 아닌 경우에만 실행하려는 다른 코드를 작성할 수 있습니다 (예 : 원격).
다음은 현재 작업중인 특정 프로젝트에서이 문제를 해결 한 방법에 대한 작은 샘플입니다.
#if DEBUG
// Code here will only be run locally.
#else
// Code here will only be run "remotely".
ASP.NET 환경에서 요청을 항상 사용할 수있는 것은 아닙니까?
HttpContext 및 해당 속성 Request / Response는 서버가 페이지 처리를 시작하자마자 초기화됩니다. 따라서 언제 어디서나 페이지 수명주기에서 C # 코드를 실행할 수 있으므로 요청 URL을 확인할 수 있습니다.
Application_Start
HTTPContext없이 실행됩니다.
Application_Start
은 항상 백그라운드에서 실행될 수 있습니다. 또한 질문은 페이지 요청과 관련이 없습니다.