Получить текущую систему.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница из HttpContext?
это на самом деле вопрос из двух частей. Во-первых,в HttpContext.Ток соответствует текущей системе.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Объект страницы?
и второй вопрос, который, вероятно, связан с первым, почему я не могу использовать следующее, чтобы увидеть, реализует ли текущая страница интерфейс:
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 рамки.
У меня есть решил проблему, потребовав от элемента управления передать ссылку на себя и проверить свойство страницы элемента управления, но мне все еще любопытно, почему это не работает.
ошибка компилятора: Не удается преобразовать систему.Сеть.HttpContext to ...IWebBase через справочную преобразования, преобразования бокса, преобразования распаковывания, оберточная преобразования или нулевое преобразование типов.
4 ответа:
нет, от MSDN на HttpContext.Current: "возвращает или задает объект HttpContext для текущего HTTP-запроса."
другими словами это объект HttpContext, а не Страница.
вы можете добраться до объекта страницы через HttpContext, используя:
Page page = HttpContext.Current.Handler as Page; if (page != null) { // Use page instance. }
вы ищете
HttpContext.Handler
. Поскольку Page реализует IHttpHandler, вы получите ссылку на текущую выполняемую страницу.Вам придется бросить его или, по крайней мере, попытаться бросить его в конкретный тип, который вы ищете.
HttpContext.Current
просто возвращает одноэлементный экземпляр HttpContext. Поэтому она не является и никогда не может быть страницей.
вы можете использовать
HttpContext.Current.CurrentHandler
Если вы хотите точную страницу, которая в данный момент выполняет. Например, запрос по умолчанию.aspx отправляется, но возникает ошибка, и вы делаетеResponse.Transfer
для вашего пользовательского ErrorHandler.страница ASPX.CurrentHandler
будет возвращать экземпляр файле errorhandler.аспн (если вызывается после ошибки), тогда какHttpContext.Current.Handler
вернет экземпляр по умолчанию.aspx.
пожалуйста, смотрите мой ответ:
Почему HttpContext.Текущий.Обработчик имеет значение null?
Может быть, решил вашу проблему.