2012-02-24 5 views
0

웹 사이트가 ASP.NET으로 작성되었습니다. 상태의 하위 도메인을 추가하고 싶습니다. nevada.mysite.com과 같은 그러나 전체 사이트를 해당 하위 도메인에 맞게 사용자 지정해야합니다. 즉, 각 페이지에서 하위 도메인 컨텍스트를 캡처하고 다른 것을 표시하고 싶습니다.하위 도메인에 따라 웹 사이트를 변경합니다.

다른 웹 사이트와 분리하고 싶지 않습니다. 나는 그들 모두가 IIS의 동일한 웹 사이트에 있기를 원합니다.

이러한 문제를 처리하는 가장 좋은 방법은 무엇입니까? 상태의 전역 변수를 저장하고 저장하는 위치는?

감사합니다.

답변

1

먼저 모든 하위 도메인을 DNS의 단일 IP 주소로 지정하십시오. 다음, 해당 IP의 모든 연결을 수신하도록 IIS를 구성

그런 다음 HttpModule (혹은 Global.asax에 사용) BeginRequest 이벤트에 대한 핸들러와 함께 쓰기 (호스트 이름을 지정하지 마십시오). 들어오는 URL에서 하위 도메인 이름을 추출하고 HttpContext.Items["state"]에 저장하십시오 (ItemsDictionary은 요청 당 고유합니다).

1

위대한 질문입니다. 나는 하위 도메인을 사용하지 않았다는 것을 제외하고는 다른 도메인의 URL을 사용했지만 동일한 코드와 데이터베이스를 사용하기 전에이 작업을 수행했습니다. 나는 각각에 where 절을 입력하지 않고도 LINQ와 SQL 코드를 조금 더 긴밀하게 통합하는 방법을 원했습니다. 다음은 내가 한 일입니다.

public static IEnumerable<T> GetDataByDomain<T>(
     IQueryable<T> src) where T:IDbColumn 
    { 
     //1 == website1 
     //2 == website2 
     //3 == both 

     string url = HttpContext.Current.Request.Url.Host; 
     int i = url == "localhost" 
      || url == "website1.com" 
      || url == "www.website1.com" ? 1 : 2; 

     return src.Where(x => x.domainID == i|| x.domainID == 3); 
    } 

기본적으로 LINQ to SQL을 사용하여 테이블을 쿼리 할 때 내 자신의 사용자 정의 where 절이 있습니다.

은과 같이 사용 : 나는 하나 개의 웹 사이트에 지정하는 데 필요한 데이터를 가지고 각 테이블의 마지막

using (var db = new MyDataContext()) 
     { 
      var items = Utility.GetDataByDomain(db.GetTable<Item>()).Where(x => x.isVisible); 
     } 

또는 둘 다 내가 1, 2 또는 3의 값을했다 열을 (모두 추가). 또한 내 LINQ 데이터 컨텍스트에서 나는 부분 클래스를 만들어 내 인터페이스를 참조 :

public partial class Item : Utility.IDbColumn 
{ 

} 

우리가 첫 번째 방법은 매우 분명 알 수없는 형식을 취 내가로부터 속성을 선택 할 수 없기 때문에 다음과 같은 인터페이스가 필요한 이유 알 수없는 유형은 내가 전달하는 모든 유형이 해당 특성을 포함하는 인터페이스에 의존한다는 것입니다.

인터페이스 :

public interface IDbColumn 
    { 
     int domainID { get; set; } 
    } 

그것은 흥미로운 시스템의 종류이다, 아마 여러 가지 방법으로 그것을 할 수 있었다. 오래 전에 지어졌고 훌륭하게 작동합니다.

관련 문제