Programing

HttpContext에서 현재 System.Web.UI.Page를 가져 오시겠습니까?

crosscheck 2020. 9. 21. 07:14
반응형

HttpContext에서 현재 System.Web.UI.Page를 가져 오시겠습니까?


이것은 실제로 두 부분으로 된 질문입니다. 먼저 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 속성을 확인하여 문제를 해결했지만 위의 내용이 작동하지 않는 이유가 여전히 궁금합니다.

컴파일러 오류 : Cannot convert System.Web.HttpContext to ... IWebBase via a reference conversion, boxing conversion, unboxing conversion, Wrapping conversion or null type conversion.


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

즉, Page가 아니라 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 페이지에서 a 수행합니다 . CurrentHandlerErrorHandler.aspx의 인스턴스 (오류 후에 호출 된 경우) HttpContext.Current.Handler를 반환하는 반면 Default.aspx의 인스턴스를 반환합니다.


내 대답을 참조하십시오 :
왜 HttpContext.Current.Handler가 null입니까?

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

참고 URL : https://stackoverflow.com/questions/58123/get-current-system-web-ui-page-from-httpcontext

반응형