ASP.NET 응용 프로그램이 로컬에서 실행 중인지 확인


79

ASP 응용 프로그램이 로컬에서 실행 중인지 확인하는 권장 방법이 있는지 알고 싶습니다. 현재 Request 개체를 사용하고 서버 변수에서 localhost 또는 127.0.0.1에 대한 문자열 검색을 수행하지만 몇 가지 제한 사항이 있습니다. 가장 큰 것은 Request 객체가 필요할 때 항상 사용할 수있는 것은 아니라는 것입니다.

답변:


148

HttpRequest.IsLocal을 참조하십시오.

bool isLocal = HttpContext.Current.Request.IsLocal;

7
Request가 null 인 경우는 어떻습니까? 즉 : Application_start?
Meh Man

@mmtemporary는 Application_Start 중에 요청이 없으며 Request.IsLocal인지 여부를 확인할 이유가 없습니다. Global.asax에서 사용하려면 Application_BeginRequest 내에서 사용하는 것이 좋습니다.
Vinicius Rocha

1
@ViniciusRocha 일부 시나리오에서는 Request가 null 인 경우 확인합니다.
Meh Man 2016 년

의존성 주입을 해결하기위한 UnityContainer가 있습니다. 로컬, 스테이징 또는 프로덕션인지 알려주는 IEnvironment 종속성이 있습니다. 요청이 null 인 경우이 문제를 해결해야합니다.
닉 Niebling

1
@NickNiebling 용어의 혼동이있는 것 같습니다 ...이 질문은 현재 요청이 웹 응용 프로그램을 실행하는 컴퓨터에서 오는지 확인하는 것입니다. 물론 현재 요청이있는 경우에만 의미가 있습니다. 프로덕션, 스테이징 또는 개발자 시스템 에서 실행 중인지 실제로 의미하는 것 같 습니까? 그것을 결정하는 방법에 관해서는, 구분하는 방법은 당신 만이 결정할 수 있다고 생각합니다. 구성 파일? 머신 이름 패턴? ASP.Net 엔진을 실행하는 시스템 계정의 이름?
Oskar Berggren 2016 년

12

Request.IsLocal 속성을 확인할 수 있습니다.


6

이것은 Application_Start와 함께 저에게 효과적이었습니다.

if (!HostingEnvironment.IsDevelopmentEnvironment)
{
      GlobalFilters.Filters.Add(new RequireHttpsAttribute());
}

IsDevelopmentEnvironment가 설정되는 방법에 대한 자세한 내용은 다음 스레드를 참조하십시오.

ASP.NET에서 HostingEnvironment.IsDevelopmentEnvironment의 값을 결정하는 것은 무엇입니까?


누군가 그것을 위해 잠그는 경우 반대도 있습니다. HostingEnvironment.IsHosted
G43beli

4

MVC보기 / ASP 페이지 / 클래스 뒤의 코드에서 :

bool isLocal = HttpContext.Current.Request.IsLocal;

MVC 컨트롤러에서 :

bool isLocal = Request.IsLocal;

1

Request.IsLocal은 127.0.0.1 또는 :: 1을 확인하는 것과 동일합니다. 이 게시물을 참조하십시오 : http://forums.asp.net/p/1065813/4081335.aspx .


2
예,하지만 표준 라이브러리 호출을 사용하면 IMO라는 코드의 의도를 더 잘 전달할 수 있습니다. 그런 간단한 일을하기 위해 내 자신의 코드를 작성하는 것보다 라이브러리를 사용하는 것을 선호합니다.

나는 동의한다. 지정된 답변이 포스터가 사용하는 것과 동일한 코드 일 수 있으므로 답변에 동일한 제한이있을 수 있다는 점을 지적하고 싶었습니다.
ZLA

1
링크가 올바르지 않습니다. IP 주소를 통해 내 서버를 로컬로 연결하면 HttpContext.Current.Request.IsLocal이 올바르게 true를 반환하지만 UserHostAddress는 127.0.0.1 (또는 :: 1)이 아닌 실제 IP 주소입니다. .NET 4에서 테스트되었습니다.
mhenry1384 2014-06-11

mhenry1384가 지적했듯이 .. IsLocal또한 동일한 시스템에서 IIS 사이트를 방문 할 때를 나타냅니다. 이렇게하면 로컬 시스템에서 들어올 때 기본적으로 YSOD 세부 오류 메시지도 표시됩니다.
Piotr Kula

1

HttpContext.Current가 null이 아닌 경우 사용

HttpContext.Current.Request.IsLocal

그렇지 않으면 예를 들어 App_Start에서 또는 HttpContext.Current를 사용할 수 있기 전에 테스트 할 수 있습니다.

HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")

또는 PC의 전용 디스크.

또 다른 방법은 프로덕션에서 설정된 상수 컴파일 변수를 사용하는 것입니다 (예 : Azure 및 visualstudio.com에서 사용하는 경우).

더럽지 만 작동합니다.


1

이 스레드의 다른 답변에 대한 @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".

0

ASP.NET 환경에서 요청을 항상 사용할 수있는 것은 아닙니까?

HttpContext 및 해당 속성 Request / Response는 서버가 페이지 처리를 시작하자마자 초기화됩니다. 따라서 언제 어디서나 페이지 수명주기에서 C # 코드를 실행할 수 있으므로 요청 URL을 확인할 수 있습니다.


HttpContext 클래스를 사용하여 Request 개체에 액세스 할 수 있다는 사실을 몰랐습니다.
Sean

궁금해서 Request 객체에 액세스하는 다른 방법은 무엇입니까? 감사합니다 :)
Roman Royter

6
예, 요청 및 HttpContext 개체는 ASP.NET 응용 프로그램에서 항상 사용할 수있는 것은 아닙니다. 예를 들어 Application_StartHTTPContext없이 실행됩니다.
Maksim Vi.

1
@RomanR. 에서 생성 된 작업 Application_Start은 항상 백그라운드에서 실행될 수 있습니다. 또한 질문은 페이지 요청과 관련이 없습니다.
Maksim Vi.

1
^ 그렇다면 당신은 무엇에 의존합니까?
eaglei22
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.