2010-02-01 3 views
6

IIS7에서 실행되는 ASP .Net 응용 프로그램이 있습니다. 내 응용 프로그램의 클래스에 일부 정적 속성을 설정하기 위해 사이트가 실행중인 현재 URL을 사용하고 있습니다.HttpContext.Current.Request를 사용하지 않고 ASP .NET에서 호스트 도메인 이름을 얻으려면 어떻게해야합니까?

var host = HttpContext.Current.Request.Url.Host; 

을 그리고 그것은 내 dev에 기계 (윈도우 XP/카시니)에서 잘 작동 :이 사용하는 도메인 이름을 (클래스의 정적 생성자 insde)을 얻고,이 작업을 수행합니다. 그러나 IIS7에 배포 할 때 예외가 발생합니다. "이 컨텍스트에서는 요청을 사용할 수 없습니다."

나는이 코드를 요청이 들어 오기 전에 IIS에서 실행되는 객체의 정적 생성자에서 사용하고 있기 때문에 이것을 추측하고 있습니다. Cassini는 요청이 발생할 때까지 정적 생성자를 트리거하지 않습니다. 지금, 나는이 매우 이유에 대한 요청에서 도메인 이름을 끌어 당길 생각을 좋아하지 않았다. 그러나 그것을 찾은 유일한 장소였다. =)

그래서 내가 알 수있는 또 다른 장소를 아는 사람이 있습니까? 호스트 도메인 이름? 나는 ASP .Net이 HttpRequests와 관계없는 어떤 수준에서 그것을 인식하고 있어야한다고 생각하고있다. 나는 그것을 액세스하는 방법을 모른다.

답변

8

도메인이 요청에 포함 된 이유는 ... 요청되는 것입니다. 예를 들어이 몇 stackexchange 사이트는 http://www.stackexchangesites.com/에서있다 : 당신이 그들을 핑 경우

, 당신은 같은 IP/웹에 그들은 모든 점을 볼 수 있습니다 서버 및 같은 애플 리케이션 (또는이 경우에는 여러 애플 리케이션에 의해 제공되지만, 하나의 큰 하나 였다면 예제가 보유하고있다 ...)하지만 응용 프로그램은 host header 때까지 어느 하나가 서브 r. 각 요청은 다른 도메인에있을 수 있습니다 ... 그래서 응용 프로그램은 그것을 모릅니다.

그러나 변경되지 않으면 에 appSetting으로 저장할 수 있습니다.

+0

아 내가 정말 정적 생성자에서이 내용을 초기화하지 않아야합니다. 사실, 내가 안전하기를 원한다면, 내 값을 전혀 정체되어 있지 않아야한다. - 나는 여러 도메인으로부터 요청을 받고있는 경우에 대비하여 모든 요청에 ​​대해 다시 찾아야한다 (내 경우에는 ' 그러나이 사실을 알고있는 것이 좋습니다. 도움을 주셔서 감사합니다. - 불행히도 지금은 내가 원하는 것보다 더 큰 덩어리를 리팩토링해야합니다. =) – Badjer

1

global.asax를 사용하거나 HttpModule을 작성하고 요청 요청 이벤트에 가입하십시오. 요청을 이벤트 처리기로 전달하게됩니다.

관련 문제