2010-07-19 7 views
2

동일한 코드 기반에서 여러 개의 가상 호스트를 서비스하려고합니다. 한 가지 생각은 단위 테스트 가능성 때문에 컨트롤러에서 HttpContext에 의존하기를 원하지 않기 때문에 HTTP 호스트 헤더를 라우트 값으로 전달한 것입니다.경로 값으로 HTTP 호스트 헤더

컨트롤러 기본 클래스 또는 이와 유사한 경로 값을 공개 할 계획을 세웠습니다. 이 같은 경로 값으로 전달하는 시도 :

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { host = HttpContext.Current.Request.Url.Host, controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

이 제품은 HttpException를 얻을 : 요청이 컨텍스트에서 사용할 수 없습니다.

더 좋은 방법에 대한 아이디어 나 제안이 있으면 감사하겠습니다.

답변

3

컨트롤러를 테스트 할 때 컨텍스트에 잘 의존해야합니다. 라우팅 시스템은 테스트 가능성을 염두에두고 설계되었으므로 테스트를 실행할 때 올바른 URL을 제공하는 모의 컨텍스트를 설정할 수 있습니다.

코드가 작동하지 않는 이유는 첫 번째 요청이 들어 오기 전에 발생하는 글로벌 Application_Start 이벤트에서 호출 할 가능성이 있기 때문입니다. 즉, HttpContext 개체를 사용할 수 없다는 의미입니다. 당신은 다음 HomeController으로 수정

+0

요청을 위해 Application_Start에서 사용할 수없는 완전히 의미가 있습니다. 감사! – Jason

-1

시도 :

public ActionResult Index() { 
    var request = HttpContext.Request.Url; 

    if (request != null && request.AbsoluteUri.Contains("domain.com")) { 
     //take the desired action and redirect here 
    } 

    //the rest of home controller logic 
}