ASP.NET Core

Три виклики проміжного ПЗ, а не переписування

Doconut реєструється так само, як і все інше в ASP.NET Core: сервіс у контейнері та проміжне ПЗ у конвеєрі. Він успадковує вашу автентифікацію, ваш логування, ваш граф DI та вашу історію розгортання, тому що працює всередині них, а не поруч.

3
виклики проміжного ПЗ для інтеграції
75
розширень файлів у комплекті
2
цілі розгортання: Windows, Docker

Проблема

Податок інтеграції, який ніхто не планує

Більшість переглядачів документів постачаються як окремий сервіс. Це означає другий блок розгортання, другий набір облікових даних, мережевий перехід, через який ваші документи тепер проходять, і ще одну справу, про яку доводиться повідомляти когось о 2 ранку.

Doconut — це бібліотека. AddDoconut() додає її у вашу колекцію сервісів; UseDoconut() додає її у ваш конвеєр. Вона працює під ідентичністю вашого процесу, бачить вашу конфігурацію, записує у ваш логер і розгортається тим, хто вже розгортає ваш застосунок.

Практичний наслідок — авторизація залишається там, де має бути. Ви викликаєте OpenDocumentAsync() після власної перевірки дозволу, і переглядач може рендерити лише те, що ви йому передали.

Можливості

Що дає вам проміжне ПЗ

Razor Pages, MVC та мінімальні API

Переглядач не прив’язаний до стилю хостингу. Відобразіть елемент mount у Razor‑виді або статичній сторінці та відкрийте документ з дії контролера, обробника сторінки або мапованого кінцевого пункту.

Ваша автентифікація, без змін

Оскільки кінцеві точки живуть у вашому конвеєрі, [Authorize] працює так, як завжди. Не існує другої системи ідентифікації для федерації.

Безпека документів на основі сесії

Безпека документів базується на стані сесії ASP.NET, тому UseSession() має бути зареєстровано перед UseDoconut(). Це означає, що уявлення переглядача про вашу особу збігається з уявленням застосунку.

Готовий до веб‑ферми

Кілька вузлів за балансувальником навантаження діляться кешем рендерингу, тому сесія, відкрита на одному вузлі, продовжує працювати, коли наступний запит потрапляє на інший.

Windows або Docker

IIS, Kestrel або контейнерний образ, який ви створюєте самостійно. Ніщо в інтеграції не змінюється між ними, крім того, де монтується файл ліцензії.

Конвертація в тому ж конвеєрі

За допомогою плагіна Converter, DocumentConverter.ConvertAsync() виконується в тому ж процесі — без другого сервісу, без тимчасового завантаження, без додаткових переходів.

Інтеграція

Реєстрація та відкритий кінцевий пункт

UserMayRead та ResolvePath — це ваш власний код. У цьому і суть: Doconut ніколи не дізнається, які документи існують або хто має право їх бачити.

Підтримувані платформи

Razor PagesMVCMinimal APIs.NET 8.NET 6WindowsDocker
csharp
// 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();

Деталі

Порядок реєстрації та підводні камені

  • UseSession() має бути викликано перед UseDoconut(). Безпека документів залежить від цього.
  • UseDoconutResources() має бути викликано перед UseDoconut() і повинно працювати під тією ж автентифікацією, що й решта застосунку.
  • Razor‑вид інжектує Doconut.Viewer і генерує ReferenceCss / ReferenceScripts; jQuery має завантажитися перед скриптами переглядача.
  • Встановіть options.LicensePath у конфігурації, щоб файл ліцензії можна було змонтувати як секрет, а не вбудовувати в образ.

Часті запитання

Чи працює воно з .NET 6 так само, як і з .NET 8?

Так. Обидві підтримуються і використовують одну й ту ж архітектуру DI плюс проміжне ПЗ. Є окремі сторінки для кожної, якщо потрібна деталізація за версією.

Чи є Razor‑компонент або tag helper?

Ні, і це навмисно. Інтеграція завжди складається з проміжного ПЗ та JavaScript‑віджету, що зберігає одну й ту ж інтеграцію для Razor Pages, MVC, Web Forms та Blazor, замість розподілу на чотири.

Як воно поводиться за балансувальником навантаження?

Веб‑ферма та розподілене розгортання підтримуються спільним кешем рендерингу. Документ, відкритий на одному вузлі, залишається доступним, коли наступні запити потрапляють на інший.

Чи потрібно встановлювати Office на сервері?

Ні. Рендеринг нативний — немає взаємодії з Office, без headless Word і без автоматизації COM, яку треба доглядати.

Спробуйте це з вашими власними документами

Тимчасова ліцензія займає кілька хвилин для запиту і працює повністю на вашому комп'ютері. Важливі файли — це ті, які вже порушують роботу вашого поточного переглядача.