2009-07-09 3 views
2

하나의 .NET MVC 응용 프로그램을 가질 수 있으며 다른 도메인에서 액세스 할 수 있습니까? 콘텐츠가 도메인에 종속적 일 수 있습니까?다른 도메인, 하나의 .NET MVC 응용 프로그램에서 다른 웹 사이트?

예를 들어, www (점) site1 (점) com과 www (점) site2 (점) com은 내 서버의 IP 및 IIS의 동일한 웹 사이트를 가리 킵니다. 해당 웹 사이트에서 내 .NET MVC 응용 프로그램이 상주합니다. 이제 ControllerAction을 트리거 한 사이트 (도메인 이름)를 알 수 있고 그에 따라 행동 할 수 있습니다 (예 : 색인 작업에서 홈페이지의 다른 콘텐츠 표시 또는 특정 사이트에 지정된 특정 콘텐츠에 대한 액세스 허용/금지) .

감사합니다. 모든 컨트롤러 동작에 전달 된 추가 매개 변수를 수용 할 수 있습니다 (아마도 라우팅 사용). 그러나 이상적인 더 우아한 솔루션이 있다면.

+0

신고! 당신은 무엇을하고 결국 어떻게 되었습니까? 감사! –

답변

1

다운로드 웹 응용 프로그램 예제를 사용하여이 작업을 수행하는 방법은 blog post입니다.

현재 요청에 대한 현재 "사이트"에 자동으로 액세스 할 수있는이 기본 클래스에서 상속받은 컨트롤러를 생성하여 요청되는 사이트를 인식하는 추상 기본 컨트롤러를 사용합니다.

또한 단일 데이터베이스에서 모든 사이트를로드 할 수 있으므로 공유 호스트에있는 경우 호스팅 비용을 절약 할 수 있습니다. 또는 설정하지 않아도되는 자체 서버를 실행하는 경우 당신이 만드는 각 사이트에 대한 새로운 데이터베이스.

+1

고마워. 내가 뭘 찾고 있었는지 알 수있다. 아마도 약간 조정해야 하겠지만 올바른 방향으로 갈 것입니다. 감사! – synhershko

+0

좋아, 천만에! –

0

우아한 솔루션은 2 개의 도메인에 2 개의 배포를 배치하고 콘텐츠를 분리하는 것입니다.

당신은 여전히 ​​공통된 콘텐츠를 가질 수 있지만이 콘텐츠를 하드 코딩하지 않고 애플리케이션 내부에서 분리하면 좋은 상황이됩니다.

2

글쎄, 당신은 항상 Request.RawUrl 속성에서 도메인을 얻을 수 있습니다.

Mercer가 언급했듯이 이들을 두 개의 별도 웹 응용 프로그램으로 배포하는 것이 더 나은 해결책이 될 수 있습니다. 이것이 가능하지 않다면 도메인을 확인하고 각 도메인에 대해 다른 뷰를 반환하는 비교적 일반적인 것을 디자인하려고합니다.

+1

전체 아이디어는 그것을 건조하게 유지하는 것입니다 (= 자신을 반복하지 마십시오). 응용 프로그램을 한 번 설치하고 싶습니다. 따라서 응용 프로그램 업데이트가 필요할 때마다 한 번만 배포하고이 웹 사이트에 의존하는 모든 웹 사이트를 "자동으로"업데이트해야합니다. 콘텐츠 분리는 FK를 사용하는 데이터베이스 또는 다른 DB에서 수행됩니다 (응용 프로그램에서 XML 파일로 구성 할 수 있음).콘텐츠를 delievering위한 MVC 응용 프로그램은 일반적인 무언가 여기에 ... 질문이 최선을 달성하는 방법은 무엇입니까? – synhershko

+1

@synhershko - 그렇다면 컨트롤러와 모델을 두 개의 웹 앱에서 공유하는 별도의 클래스 라이브러리 프로젝트에 포함시켜보십시오. 그런 다음 각 웹 앱에 자체보기가 있습니다. 당신은 여전히 ​​두 개의 배포판을 갖지만 하나의 코드베이스 만 가질 수 있습니다. 가장 큰 문제는 사이트의 기능이 너무 많이 갈라지기 시작하면 어수선한 코드로 이어질 수 있다는 것입니다. 앱에 대해 더 많이 알지 못해도 문제가된다고 말하기는 어렵습니다. –

+0

나는 별도의 클래스 라이브러리에서 이미 대부분의 코드 (Model 및 기타 보조 도구라고 부르는 코드)를 가지고 있습니다. 컨트롤러는 조금 덜 일반적이고보기도 마찬가지입니다. 하나의 설치 만 유지하려는 주된 이유 중 하나는 모든 업데이트로 여러 설치를 업데이트 할 필요가 없으며 2 개 이상의 사이트가 있고 업데이트가 자주 발생한다는 것입니다. 두 가지 방법으로 하나의 코드베이스를 갖게 될 것입니다. 차이점은 여러 설치를 피하고 위치를 게시하려는 것입니다. – synhershko

1

당신은 쉽게 다음의 라인을 따라 뭔가 요청에 사용되는 도메인 이름에 액세스 할 수 있습니다

switch(Request.ServerVariables("SERVER_NAME")) 
{ 
    case "www.site1.com": 
     //do something 
    case "www.site2.com": 
     //do something else 
    default: 
     //???? 
} 

당신은이 작업을 수행 할 수 있습니다 어디서나 당신이 Request 객체에 액세스 할 수 있습니다.

+0

감사합니다. 이미 알고 있지만 사이트 ID를 찾고 컨트롤러 조치에 전달하기 위해이 코드를 어디에서 사용하고 싶습니까? 또는 더 나은 아직, 거기에 여분의 매개 변수를 컨트롤러 작업을하지 않고이 일을 더 부드러운 방법이 무엇입니까? – synhershko

0

다른 데이터베이스를 사용하여 데이터를 별도로 유지하는 경우 세션에서 서버 이름 변수를 기반으로 데이터베이스 중 하나를 사용하도록 응용 프로그램을 구성하십시오. 그런 다음 사용자의 세션에 작업 연결 문자열을 배치합니다.

protected void Session_Start(Object sender, EventArgs e) 
{ 
    NameValueCollection NVCSrvElements = Request.ServerVariables; 
    switch (NVCSrvElements.Get("SERVER_NAME")) 
    { 
     case "www.whatever1.com": 
      Session["ConnStr"]="db1 connection string"; 
      break; 
     case "www.whatever2.com": 
      Session["ConnStr"] = "db2 connection string"; 
      break; 
    }     
} 

그런 다음이 연결 문자열을 나머지 응용 프로그램에서 사용하십시오.

관련 문제