문제

이것은 실제로 두 부분으로 구성된 질문입니다.첫째, HttpContext.Current가 현재 System.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 속성을 확인하여 문제를 해결했지만 여전히 위의 방법이 작동하지 않는 이유가 궁금합니다.

컴파일러 오류는 다음과 같습니다.참조 변환, 박싱 변환, 언박싱 변환, 래핑 변환 또는 null 유형 변환을 통해 System.Web.HttpContext를 ...IWebBase로 변환할 수 없습니다.

도움이 되었습니까?

해결책

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

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

다음을 사용하여 HttpContext를 통해 Page 개체에 접근할 수 있습니다.

Page page = HttpContext.Current.Handler as Page;

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

다른 팁

당신이 찾고있는 HttpContext.Handler.Page는 IHttpHandler를 구현하므로 현재 실행 중인 페이지에 대한 참조를 얻습니다. 이를 캐스팅하거나 최소한 찾고 있는 특정 유형으로 캐스팅해야 합니다.

HttpContext.Current 단순히 HttpContext의 싱글톤 인스턴스를 반환합니다.그러므로 그것은 페이지가 아니며 페이지가 될 수도 없습니다.

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

내 답변을 참조하십시오.
HttpContext.Current.Handler가 null인 이유는 무엇입니까?

문제가 해결되었을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top