2008-09-12 10 views
79

이것은 실제로 두 부분으로 된 질문입니다. 첫째, HttpContext.Current는 현재 System.UI.Page 객체에 해당합니까?HttpContext에서 현재 System.Web.UI.Page를 가져 옵니까?

private IWebBase FindWebBase() 
{ 
    if (HttpContext.Current as IWebBase != null) 
    { 
     return (IWebBase)HttpContext.Current.; 
    } 
    throw new NotImplementedException("Crawling for IWebBase not implemented yet"); 
} 

일반적인 상황은 일부 컨트롤이다 : 나는 현재 페이지는 인터페이스를 구현 있는지 확인하기 위해 다음 사용할 수없는 이유

그리고 아마 처음과 관련된 두 번째 질문,

이며, SharePoint 웹 파트로 실행되는지 Asp.Net 프레임 워크의 일부로 실행되는지를 알아야합니다.

컨트롤을 자체에 대한 참조를 전달하고 컨트롤의 Page 속성을 확인하도록 요구하여 문제를 해결했지만 위의 이유가 작동하지 않는 이유는 여전히 궁금합니다.

컴파일러 오류 : 참조 변환, 복싱 변환, unboxing 변환, 변환 변환 또는 null 형식 변환을 통해 System.Web.HttpContext를 ... IWebBase로 변환 할 수 없습니다.

답변

134

아니요, MSDN의 HttpContext.Current : "현재 HTTP 요청에 대한 HttpContext 개체를 가져 오거나 설정합니다."

즉, 페이지가 아닌 HttpContext 개체입니다.

다음을 사용하여 HttpContext를 통해 Page 개체를 얻을 수 있습니다 :

Page page = HttpContext.Current.Handler as Page; 

if (page != null) 
{ 
    // Use page instance. 
} 
+0

내가 필요한 것 ... 감사합니다 ... :) – AceMark

+0

이것은 세션, 요청 및 응답에 어셈블리가 필요한 액세스 권한을 부여했습니다. 고맙습니다. – froggythefrog

+0

감사합니다, 좋은 정보. 그것은 나를 도왔다. – Ratna

37

당신은 HttpContext.Handler을 찾고 있습니다. Page가 IHttpHandler를 구현하기 때문에 현재 실행중인 페이지에 대한 참조를 얻을 수 있습니다. 캐스팅해야하거나, 찾고있는 특정 유형으로 캐스팅을 시도해야합니다.

HttpContext.Current은 단순히 HttpContext의 싱글 톤 인스턴스를 반환합니다. 따라서 페이지가 될 수 없으며 결코 될 수도 없습니다.

+2

누구든지이 책을 읽는 것입니다. 아래의 답변은 동일하지만 예제 (예 : HttpContext.Current.Handler 사용)입니다. –

13

당신은 당신이 현재 실행 정확한 페이지를 원하는 경우 HttpContext.Current.CurrentHandler를 사용할 수 있습니다. 예를 들어 Default.aspx에 대한 요청이 전송되지만 오류가 발생하고 사용자 지정 ErrorHandler.aspx 페이지에 Response.Transfer을 수행합니다. CurrentHandler은 ErrorHandler.aspx (오류 후 호출 된 경우)의 인스턴스를 반환하지만 HttpContext.Current.Handler은 Default.aspx의 인스턴스를 반환합니다.

0

내 대답을 참조하십시오 Why HttpContext.Current.Handler is null?


아마 문제를 해결.

+0

-1이됩니다. 이는 허용되는 대답과 동일합니다. –

+0

내 작업에 동일한 코드를 사용하고 있지만 작업 세부 정보를 알지 못해서 짜증났습니다. 그래서이 코드를 개발했습니다. 나는 내 문제가있는 친구를 돕기 위해 코드를 여기에 넣으려고했다. 존 손더스에게 감사드립니다. –

관련 문제