Razor Pages, MVC и минимальные API
Просмотрщик не привязан к стилю хостинга. Отрендерьте контейнерный div из Razor‑view или статической страницы и откройте документ из действия контроллера, обработчика страницы или сопоставленного эндпоинта.
Doconut регистрируется так же, как и всё остальное в ASP.NET Core: как сервис в контейнере и middleware в конвейере. Он наследует вашу аутентификацию, логирование, граф DI и процесс развертывания, потому что работает внутри них, а не рядом с ними.
Проблема
Большинство просмотрщиков документов поставляются как отдельный сервис. Это означает второй блок развертывания, второй набор учетных данных, сетевой переход, через который теперь проходят ваши документы, и еще одну проблему, о которой придется писать кому‑то в 2 часа ночи.
Doconut — это библиотека. AddDoconut() помещает её в вашу коллекцию сервисов; UseDoconut() добавляет её в ваш конвейер. Она работает под идентичностью вашего процесса, видит вашу конфигурацию, пишет в ваш логгер и разворачивается тем, кто уже разворачивает ваше приложение.
Практический результат заключается в том, что авторизация остаётся там, где ей место. Вы вызываете OpenDocumentAsync() после собственной проверки прав, и просмотрщик может отобразить только то, что вы ему передали.
Возможности
Просмотрщик не привязан к стилю хостинга. Отрендерьте контейнерный div из Razor‑view или статической страницы и откройте документ из действия контроллера, обработчика страницы или сопоставленного эндпоинта.
Поскольку эндпоинты находятся в вашем конвейере, [Authorize] работает так же, как всегда. Нет второй системы идентификации для федерации.
Безопасность документов опирается на состояние сессии ASP.NET, поэтому UseSession() должен быть зарегистрирован до UseDoconut(). Это означает, что представление просмотрщика о том, кто вы, совпадает с представлением приложения.
Несколько узлов за балансировщиком нагрузки делят кэш рендеринга, поэтому сессия, открытая на одном узле, продолжает работать, когда следующий запрос попадает на другой.
IIS, Kestrel или образ контейнера, который вы собираете сами. Ничего в интеграции не меняется между ними, кроме места монтирования файла лицензии.
С плагином Converter, DocumentConverter.ConvertAsync() выполняется в том же процессе — без второго сервиса, без временной загрузки, без обратного пути.
Интеграция
UserMayRead и ResolvePath — ваш собственный код. В этом суть: Doconut никогда не узнает, какие документы существуют и кто имеет право их видеть.
Поддерживаемые платформы
// Program.cs
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddSession(); // document security rides on session state
var app = builder.Build();
app.UseSession(); // call UseSession() before UseDoconut()
app.UseDoconutResources(); // must be registered before UseDoconut()
app.UseDoconut();
// Open the document server-side, behind your own authorization
app.MapPost("/api/open", async (Viewer viewer, HttpContext ctx, string documentId) =>
{
if (!await ctx.UserMayRead(documentId))
return Results.Forbid();
// The token is opaque — hand it to the widget, never log or persist it.
string token = await viewer.OpenDocumentAsync(ResolvePath(documentId));
return Results.Ok(new { token });
}).RequireAuthorization();Подробности
Да. Оба поддерживаются и используют одну и ту же архитектуру DI плюс middleware. Для каждой версии есть отдельные страницы, если нужны детали, специфичные для версии.
Нет, и это намеренно. Интеграция всегда представляет собой middleware плюс JavaScript‑виджет, что сохраняет единый способ интеграции для Razor Pages, MVC, Web Forms и Blazor, вместо того чтобы фрагментировать его на четыре части.
Веб‑ферма и распределённое развертывание поддерживаются через общий кэш рендеринга. Документ, открытый на одном узле, остаётся читаемым, когда последующие запросы попадают на другой.
Нет. Рендеринг нативный — нет взаимодействия с Office, нет безголового Word и нет COM‑автоматизации, требующей наблюдения.
Blazor
Рендеринг на стороне сервера с виджетом, который чисто монтируется в жизненный цикл interop Blazor — поддерживаются и Server, и WebAssembly.
BlazorWord
Нативный рендеринг DOC/DOCX/RTF/ODT без установки Office, без COM‑interop и без серверной автоматизации.
WordВременная лицензия запрашивается за несколько минут и полностью работает на вашем компьютере. Важные файлы — это те, которые уже вызывают сбои в вашем текущем просмотрщике.