Esta es en realidad una pregunta de dos partes. Primero, ¿HttpContext.Current corresponde al objeto System.UI.Page actual?
Y la segunda pregunta, que probablemente esté relacionada con la primera, es por qué no puedo usar lo siguiente para ver si la página actual implementa una interfaz:
private IWebBase FindWebBase()
{
if (HttpContext.Current as IWebBase != null)
{
return (IWebBase)HttpContext.Current.;
}
throw new NotImplementedException("Crawling for IWebBase not implemented yet");
}
El contexto general es que algunos controles necesitan saber si se están ejecutando como un elemento web de SharePoint o como parte de un marco Asp.Net.
Resolví el problema requiriendo que el control pase una referencia a sí mismo y verificando la propiedad Page del control, pero todavía tengo curiosidad por saber por qué lo anterior no funciona.
El error del compilador es: No se puede convertir System.Web.HttpContext a ... IWebBase mediante una conversión de referencia, conversión de caja, conversión de caja, conversión de envoltura o conversión de tipo nulo.
fuente
Estás buscando
HttpContext.Handler
. Dado que Page implementa IHttpHandler, obtendrás una referencia a la página que se está ejecutando actualmente. Tendrás que convertirla, o al menos intentar convertirla al tipo particular que estás buscando.HttpContext.Current
simplemente devuelve la instancia singleton de HttpContext. Por tanto, no es ni puede ser nunca una página.fuente
Es posible que desee utilizar
HttpContext.Current.CurrentHandler
si desea la página precisa que se está ejecutando actualmente. Por ejemplo, se envía una solicitud para Default.aspx, pero seResponse.Transfer
genera un error y usted realiza una en su página personalizada ErrorHandler.aspx.CurrentHandler
devolverá la instancia de ErrorHandler.aspx (si se llama después del error) mientrasHttpContext.Current.Handler
que devolvería una instancia de Default.aspx.fuente
Consulte mi respuesta:
¿Por qué HttpContext.Current.Handler es nulo?
Quizás resolvió tu problema.
fuente