Просмотрщик Doconut — это .NET‑библиотека для отображения PDF, Office, CAD, изображений и других поддерживаемых форматов документов внутри приложения. Надёжная интеграция Doconut — это не просто поиск самого короткого фрагмента кода, а выбор чёткой границы между вашим приложением, просмотрщиком и браузером.

Центр документации Doconut содержит ссылки на поддерживаемые пути настройки для различных типов .NET‑проектов. Выберите руководство, соответствующее версии, установленной в вашем приложении, и рассматривайте окружающую страницу, проверки идентификации и рабочий процесс доступа как часть кода приложения, которым владеет ваша команда.
Начните с границы интеграции
Существует три распространённых способа разместить предварительный просмотр документа в продукте. Правильный выбор зависит от того, кто отвечает за навигацию, аутентификацию и жизненный цикл просмотрщика.
| Шаблон | Наилучшее применение | Основной компромисс |
|---|---|---|
| Вид приложения | Страница .NET, которая отображает просмотрщик рядом с элементами управления продукта | Тесная интеграция, но жизненный цикл страницы и просмотрщика связаны |
| Iframe, управляемый приложением | Портал, которому требуется изоляция между UI‑хостом и маршрутом предварительного просмотра | Чёткая граница, но коммуникацию необходимо явно спроектировать |
| Компонент фреймворка вокруг серверного маршрута | Оболочка React, Angular или Vue, поддерживаемая .NET‑приложением | Знакомая композиция фронтенда, но с большим количеством состояний жизненного цикла для управления |
Шаблон с iframe не обязан указывать публичный URL документа. Он может указывать на аутентифицированный маршрут в вашем собственном приложении. Такой маршрут может проверять доступ и рендерить страницу просмотрщика, не раскрывая путь к хранилищу на хост‑странице.
Создайте стабильную, адаптивную поверхность предварительного просмотра
Не пытайтесь воссоздавать разметку или инициализацию просмотрщика из иллюстративного фрагмента блога. Doconut публикует файлы, промежуточные слои, пространства имён и настройки просмотрщика, соответствующие каждой поддерживаемой версии .NET. Например, официальное руководство по настройке .NET 6 и выше описывает серверный middleware, объект просмотрщика, параметры документа, конфигурацию рендеринга и необходимые клиентские ресурсы.
Используйте эти версионированные материалы для создания просмотрщика, а затем задайте его контейнеру фиксированную ширину и высоту в своей разметке. Зарезервируйте достаточно места до загрузки, чтобы окружающая страница не «прыгала», и протестируйте панель инструментов и первую страницу на реальных точках перелома, поддерживаемых вашим продуктом.
Прежде чем фиксировать выбранную композицию, сравните её с живыми демонстрациями Doconut. Демонстрации охватывают несколько стилей интеграции .NET и фронтенда, включая отдельный пример с iframe, и помогают отличить официально поддерживаемый путь от выглядящего правдоподобно, но непроверенного фрагмента кода.
Оставляйте решения по доступу на сервере
Хост‑страница никогда не должна определять, может ли пользователь просматривать документ. Перед тем как отдать маршрут предварительного просмотра, приложение должно:
- Аутентифицировать запрос.
- Авторизовать пользователя для запрашиваемого документа и арендатора.
- Получить документ через идентификатор, контролируемый сервером.
- Открыть его через просмотрщик только после успешного прохождения проверок.
- Вернуть общее состояние «не найдено» или «доступ запрещён», не раскрывая детали хранилища.
Неясный (opaque) идентификатор улучшает чистоту URL, но не заменяет авторизацию. Применяйте те же проверки к запросам страниц, миниатюр, поиска, аннотаций, экспорта и печати, которые вы открываете наружу.
Определите способ коммуникации между хостом и просмотрщиком
Вид приложения может напрямую вызывать свои компоненты. Для iframe требуется более узкий контракт. Определите только те события, которые действительно нужны хосту, например:
- Предпросмотр готов
- Не удалось открыть документ
- Текущая страница изменена
- Сессия истекла
- Пользователь запросил закрыть предварительный просмотр
Если вы используете postMessage, проверяйте как event.origin, так и структуру сообщения. Не допускайте wildcard‑источников в продакшене и никогда не передавайте учётные данные, пути к хранилищу или сырое содержимое документа через сообщения.
Рассматривайте ограничения браузера как многоуровневую защиту
Iframe не изолируется автоматически. Атрибут sandbox может ограничить возможности, но слишком строгие настройки могут нарушить скрипты просмотрщика, загрузки или поведение same‑origin. Начинайте с минимального набора возможностей, задокументированного для вашей интеграции, и тестируйте его вместе с вашей политикой Content Security Policy.
Также проверьте:
frame-ancestorsилиX-Frame-Optionsдля маршрута предварительного просмотраframe-srcдля хост‑страницы- Поведение cookie
SameSite, если iframe требует сессии - Политику
Referrer‑Policyдля URL‑ов, содержащих идентификаторы маршрутизации - Заголовки кэша для страниц, отображающих конфиденциальный материал
Эти настройки принадлежат окружающему приложению и инфраструктуре. Компонент просмотрщика не может самостоятельно выбрать правильную политику для вашего арендатора и модели угроз.
Проектирование состояний загрузки, ошибок и истечения срока
Пустой прямоугольник не является полезным сообщением об ошибке. Предоставьте хост‑странице явные состояния для отказа авторизации, неподдерживаемого ввода, повреждённых файлов, тайм‑аутов и истёкших сессий. Формулируйте сообщения так, чтобы они подсказывали действия, но не раскрывали внутренние пути или детали исключений.
Для длинных документов сохраняйте контейнер просмотрщика, пока готовится первая страница. Если пользователи могут переключать документы, не покидая страницу, отменяйте устаревшие запросы и сбрасывайте видимый заголовок, количество страниц и фокус перед загрузкой следующего элемента.
Доступность и поведение клавиатуры
Каждому iframe задайте информативный title. Сделайте предварительный просмотр доступным с клавиатуры, предоставьте видимый способ вернуть фокус на хост‑страницу и не «запирайте» фокус внутри пользовательских оверлеев. Если у просмотрщика есть собственные сочетания клавиш, задокументируйте конфликты с сочетаниями, используемыми в оболочке вашего продукта.
Доступный вариант отката может предлагать контролируемую загрузку или альтернативное представление, если это допускает ваш бизнес‑процесс. Не добавляйте публичную ссылку на файл только в качестве запасного варианта.
Практический чек‑лист проверки
Перед выпуском проверьте весь путь запроса, а не только начальную загрузку страницы:
- Авторизованный пользователь может открыть разрешённый документ.
- Пользователь из другого арендатора не может повторно использовать URL предварительного просмотра.
- Прямые запросы к эндпоинтам, связанным с просмотрщиком, проходят те же проверки авторизации.
- Обновление, навигация назад и истечение сессии приводят к понятным состояниям.
- Предпросмотр остаётся пригодным при поддерживаемых размерах окна и уровнях масштабирования.
- Ошибки консоли браузера и неудачные сетевые запросы видны в системе мониторинга.
- Журналы хранилища и приложения не сохраняют секреты или полные URL‑ы документов.
Заключение
Самая поддерживаемая интеграция Doconut — это та, у которой небольшой, чётко определённый контракт. Позвольте Doconut выполнять роль просмотрщика документов, описанную в его версионированной документации, а ваше приложение будет отвечать за идентификацию, авторизацию, маршрутизацию, хранение, политику браузера и обратную связь с пользователем. Когда будете готовы протестировать готовые примеры локально, используйте ресурсы загрузки Doconut вместо копирования кода из сторонних статей.