c# - mvc - Obtenga la System.Web.UI.Página actual de HttpContext?
httpcontext controller c# (4)
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.
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 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.
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.
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.
}
Por favor mira mi respuesta:
¿Por qué HttpContext.Current.Handler es nulo?
Tal vez resolvió tu problema.