Obtenga la System.Web.UI.Página actual de HttpContext?

Esta es en realidad una pregunta en dos partes. Primero, ¿el 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 parte web de SharePoint o como parte de un marco Asp.Net.

He resuelto el problema exigiendo que el control pase una referencia a sí mismo, y verificando la propiedad de la página del control, pero todavía tengo curiosidad de por qué lo anterior no funciona.

El error del comstackdor es: No se puede convertir System.Web.HttpContext en … IWebBase a través de una conversión de referencia, conversión de boxeo, conversión de unboxing, conversión de envoltura o conversión de tipo nulo.

No, desde MSDN en HttpContext.Current: “Obtiene o establece el objeto HttpContext para la solicitud HTTP actual”.

En otras palabras, es un objeto HttpContext, no una página.

Puede acceder al objeto de la página a través de HttpContext usando:

 Page page = HttpContext.Current.Handler as Page; if (page != null) { // Use page instance. } 

Está buscando HttpContext.Handler . Dado que Page implementa IHttpHandler, obtendrá una referencia a la página que se está ejecutando actualmente. Tendrá que lanzarlo, o al menos tratar de convertirlo al tipo particular que está buscando.

HttpContext.Current simplemente devuelve la instancia singleton de HttpContext. Por lo tanto, no es ni puede ser, una página.

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 de Default.aspx, pero se produce un error y usted realiza una Transferencia de Response.Transfer a su página personalizada ErrorHandler.aspx. CurrentHandler devolverá la instancia de ErrorHandler.aspx (si se invoca después del error) mientras que HttpContext.Current.Handler devolverá una instancia de Default.aspx.

Por favor mira mi respuesta:
¿Por qué HttpContext.Current.Handler es nulo?

Tal vez resolvió tu problema.