Получить текущую систему.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница из 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 83

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?

Может быть, решил вашу проблему.