Na verdade, esta é uma questão de duas partes. Primeiro, o HttpContext.Current corresponde ao objeto System.UI.Page atual?
E a segunda pergunta, que provavelmente está relacionada à primeira, é por que não posso usar o seguinte para ver se a página atual implementa uma interface:
private IWebBase FindWebBase()
{
if (HttpContext.Current as IWebBase != null)
{
return (IWebBase)HttpContext.Current.;
}
throw new NotImplementedException("Crawling for IWebBase not implemented yet");
}
O contexto geral é que alguns controles precisam saber se estão sendo executados como uma webpart do SharePoint ou como parte de uma estrutura Asp.Net.
Resolvi o problema exigindo que o controle passasse uma referência para si mesmo e verificando a propriedade Page do controle, mas ainda estou curioso para saber por que o acima não funciona.
O erro do compilador é: Não é possível converter System.Web.HttpContext em ... IWebBase por meio de uma conversão de referência, conversão de boxing, conversão de unboxing, conversão de empacotamento ou conversão de tipo nulo.
fonte
Você está procurando
HttpContext.Handler
. Como Page implementa IHttpHandler, você obterá uma referência para a página em execução no momento. Você terá que convertê-la ou pelo menos tentar convertê-la para o tipo específico que está procurando.HttpContext.Current
simplesmente retorna a instância singleton de HttpContext. Portanto, não é e nunca pode ser uma página.fonte
Você pode querer usar
HttpContext.Current.CurrentHandler
se quiser a página precisa que está sendo executada no momento. Por exemplo, uma solicitação para Default.aspx é enviada, mas um erro é lançado e você faz umResponse.Transfer
na sua página personalizada ErrorHandler.aspx.CurrentHandler
retornará a instância de ErrorHandler.aspx (se chamado após o erro), enquantoHttpContext.Current.Handler
retornará uma instância de Default.aspx.fonte
Consulte minha resposta:
Por que HttpContext.Current.Handler é nulo?
Talvez tenha resolvido seu problema.
fonte