2008-09-12 20 views
79

Esto es realmente una pregunta de dos partes. Primero, ¿el HttpContext.Current corresponde al objeto System.UI.Page actual?Obtener System.Web.UI.Página actual de HttpContext?

Y la segunda pregunta, que probablemente está relacionado con el primero, es por eso que 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 necesita saber si se están ejecutando como una parte web de SharePoint o como parte de un marco Asp.Net.

He resuelto el problema requiriendo 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 compilador 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.

Respuesta

134

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.

Se puede llegar a través del objeto de página HttpContext usando:

Page page = HttpContext.Current.Handler as Page; 

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

justo lo que necesito ... gracias ... :) – AceMark

+0

Esto me dio el acceso que necesitaba dentro de un ensamblado para Sesión, Solicitud y Respuesta. Gracias. – froggythefrog

+0

Thankx, buena información. Me ayudó. – Ratna

37

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.

+2

Solo una nota para todos los que lean esto. La respuesta a continuación es la misma pero con un ejemplo (es decir, utiliza HttpContext.Current.Handler). –

13

es posible que desee utilizar HttpContext.Current.CurrentHandler si desea que la página exacta que se está ejecutando actualmente. Por ejemplo, se envía una solicitud de Default.aspx, pero se produce un error y usted hace un Response.Transfer en su página personalizada ErrorHandler.aspx. CurrentHandler devolverá la instancia de ErrorHandler.aspx (si se llama después del error) mientras que HttpContext.Current.Handler devolverá una instancia de Default.aspx.

0

Por favor, vea mi respuesta:
Why HttpContext.Current.Handler is null?

Tal vez resuelto su problema.

+0

-1, esta es la misma respuesta aceptada. –

+0

Estoy usando el mismo código para mi trabajo, pero Estaba tan molesto porque no estaba al tanto de los detalles de los detalles del trabajo. Desarrollé este código para mi trabajo. Pensé que poner código aquí para ayudar a amigos que tienen mi problema. Gracias John Saunders. –