На самом деле это вопрос из двух частей. Во-первых, соответствует ли HttpContext.Current текущему объекту System.UI.Page?
И второй вопрос, который, вероятно, связан с первым, - почему я не могу использовать следующее, чтобы увидеть, реализует ли текущая страница интерфейс:
private IWebBase FindWebBase()
{
if (HttpContext.Current as IWebBase != null)
{
return (IWebBase)HttpContext.Current.;
}
throw new NotImplementedException("Crawling for IWebBase not implemented yet");
}
Общий контекст состоит в том, что некоторые элементы управления должны знать, выполняются ли они как веб-часть SharePoint или как часть инфраструктуры Asp.Net.
Я решил проблему, потребовав от элемента управления передать ссылку на себя и проверив свойство Page этого элемента управления, но мне все еще любопытно, почему это не работает.
Ошибка компилятора: не удается преобразовать System.Web.HttpContext в ... IWebBase с помощью преобразования ссылки, преобразования упаковки, преобразования распаковки, преобразования упаковки или преобразования нулевого типа.
источник
Вы ищите
HttpContext.Handler
. Поскольку Page реализует IHttpHandler, вы получите ссылку на страницу, выполняющуюся в данный момент. Вам нужно будет преобразовать ее или, по крайней мере, попытаться преобразовать ее в конкретный тип, который вы ищете.HttpContext.Current
просто возвращает одноэлементный экземпляр HttpContext. Следовательно, это не страница, и никогда не может быть.источник
Вы можете захотеть использовать,
HttpContext.Current.CurrentHandler
если хотите, чтобы именно та страница выполнялась в данный момент. Например, запрос на Default.aspx отправляется, но выдается ошибка, и вы выполняетеResponse.Transfer
операцию на своей пользовательской странице ErrorHandler.aspx.CurrentHandler
вернет экземпляр ErrorHandler.aspx (если вызывается после ошибки), тогда какHttpContext.Current.Handler
вернет экземпляр Default.aspx.источник
См. Мой ответ:
Почему HttpContext.Current.Handler имеет значение null?
Возможно решила вашу проблему.
источник