C'est en fait une question en deux parties. Tout d'abord, le HttpContext.Current correspond-il à l'objet System.UI.Page actuel?
Et la deuxième question, qui est probablement liée à la première, est pourquoi je ne peux pas utiliser ce qui suit pour voir si la page actuelle implémente une interface:
private IWebBase FindWebBase()
{
if (HttpContext.Current as IWebBase != null)
{
return (IWebBase)HttpContext.Current.;
}
throw new NotImplementedException("Crawling for IWebBase not implemented yet");
}
Le contexte général est que certains contrôles doivent savoir s'ils s'exécutent en tant que composant WebPart SharePoint ou en tant que partie d'un framework Asp.Net.
J'ai résolu le problème en exigeant que le contrôle passe une référence à lui-même et en vérifiant la propriété Page du contrôle, mais je suis toujours curieux de savoir pourquoi ce qui précède ne fonctionne pas.
L'erreur du compilateur est la suivante: Impossible de convertir System.Web.HttpContext en ... IWebBase via une conversion de référence, une conversion de boxe, une conversion de déballage, une conversion d'encapsulation ou une conversion de type nul.
la source
Vous cherchez
HttpContext.Handler
. Puisque Page implémente IHttpHandler, vous obtiendrez une référence à la page en cours d'exécution. Vous devrez la convertir, ou au moins essayer de la convertir dans le type particulier que vous recherchez.HttpContext.Current
renvoie simplement l'instance singleton de HttpContext. Par conséquent, ce n'est pas et ne peut jamais être une page.la source
Vous voudrez peut-être utiliser
HttpContext.Current.CurrentHandler
si vous voulez la page précise en cours d'exécution. Par exemple, une demande pour Default.aspx est envoyée, mais une erreur est renvoyée et vous effectuez unResponse.Transfer
sur votre page ErrorHandler.aspx personnalisée.CurrentHandler
renverra l'instance de ErrorHandler.aspx (si elle est appelée après l'erreur) alorsHttpContext.Current.Handler
que renverra une instance de Default.aspx.la source
Veuillez consulter ma réponse:
pourquoi HttpContext.Current.Handler est nul?
Peut-être résolu votre problème.
la source