Pregunta

En realidad, esta es 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 solicitando que el control se pasara una referencia a sí mismo y verificando la propiedad Página 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 boxeo, conversión de unboxing, conversión de envoltura o conversión de tipo nulo.

¿Fue útil?

Solución

No, de 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 Página a través de HttpContext usando:

Page page = HttpContext.Current.Handler as Page;

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

Otros consejos

Estas buscando HttpContext.Handler.Dado que Page implementa IHttpHandler, obtendrá una referencia a la página que se está ejecutando actualmente. Tendrá que convertirla, o al menos intentar convertirla al tipo particular que está buscando.

HttpContext.Current simplemente devuelve la instancia única de HttpContext.Por lo tanto, no es ni podrá ser nunca 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 para Default.aspx, pero se genera un error y se realiza una Response.Transfer a 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ía una instancia de Default.aspx.

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

Quizás resolvió tu problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top