Вопрос

На самом деле это вопрос из двух частей.Во-первых, соответствует ли 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 с помощью преобразования ссылок, преобразования упаковки, преобразования распаковки, преобразования переноса или преобразования нулевого типа.

Это было полезно?

Решение

Нет, из MSDN на HttpContext.Current:«Получает или задает объект HttpContext для текущего HTTP-запроса».

Другими словами, это объект HttpContext, а не Page.

Вы можете получить доступ к объекту Page через HttpContext, используя:

Page page = HttpContext.Current.Handler as Page;

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

Другие советы

Вы ищете 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?

Возможно, решил вашу проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top