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


84

이것은 실제로 두 부분으로 된 질문입니다. 먼저 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.

답변:


144

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

즉, Page가 아니라 HttpContext 개체입니다.

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

Page page = HttpContext.Current.Handler as Page;

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

2
부정확하여 하향 투표했습니다. HttpContext.Current.CurrentHandler의 대답이 맞습니다! Server.Transfer를 수행하면 HttpContext.Current.Handler가 이전 페이지가되고 HttpContext.Current.CurrentHandler가 현재 페이지가됩니다.
mike

37

당신은를 찾고 있습니다 HttpContext.Handler. Page는 IHttpHandler를 구현하므로 현재 실행중인 페이지에 대한 참조를 얻을 수 있습니다.

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


2
이 글을 읽는 모든 사람에게 메모입니다. 아래의 대답은 동일하지만 예제가 있습니다 (예 : HttpContext.Current.Handler 사용).
마이크 넬슨

15

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


0

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

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


작업에 동일한 코드를 사용하고 있는데 작업 내용의 세부 사항을 알지 못해서 너무 짜증이났습니다. 그래서 내 직장을 위해이 코드를 개발했습니다. 나는 내 문제가있는 친구들을 돕기 위해 여기에 코드를 넣는다 고 생각했다. 존 손더스에게 감사합니다.
Amin Ghaderi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.