ASP.NET Core

Tři volání middleware, ne přepis

Doconut je registrován stejným způsobem jako vše ostatní v ASP.NET Core: jako služba v kontejneru a middleware v pipeline. Dědí vaši autentizaci, vaše logování, váš DI graf a váš nasazovací příběh, protože běží uvnitř nich, nikoli vedle nich.

3
volání middleware k integraci
75
rozšíření souborů ihned k dispozici
2
cíle nasazení: Windows, Docker

Problém

Daň integrace, na kterou nikdo neplánuje rozpočet

Většina prohlížečů dokumentů přichází jako samostatná služba. To znamená druhou jednotku nasazení, druhou sadu přihlašovacích údajů, síťový skok, přes který vaše dokumenty nyní putují, a další věc, o které je třeba někoho v 2 ráno probudit.

Doconut je knihovna. AddDoconut() ji vloží do vaší kolekce služeb; UseDoconut() ji vloží do vašeho pipeline. Běží pod identitou vašeho procesu, vidí vaše nastavení, zapisuje do vašeho loggeru a nasazuje ji to, co již nasazuje vaši aplikaci.

Praktickým důsledkem je, že autorizace zůstává tam, kde má být. Zavoláte OpenDocumentAsync() po vlastním ověření oprávnění a prohlížeč může vykreslit jen to, co jste mu předali.

Schopnosti

Co vám middleware poskytuje

Razor Pages, MVC a minimální API

Prohlížeč není svázán s konkrétním stylem hostování. Vykreslete montovací div z Razor view nebo statické stránky a otevřete dokument z akce kontroleru, obsluhy stránky nebo mapovaného koncového bodu.

Vaše autentizace, nezměněna

Protože koncové body žijí ve vašem pipeline, [Authorize] funguje tak, jak vždy fungoval. Neexistuje žádný druhý identitní systém, se kterým by se muselo federovat.

Bezpečnost dokumentů podpořená session

Bezpečnost dokumentů je postavena na ASP.NET session state, proto musí být UseSession() zaregistrováno před UseDoconut(). To znamená, že pojetí uživatele v prohlížeči je stejné jako v aplikaci.

Připraveno pro web farmu

Více uzlů za load balancerem sdílí renderovací cache, takže session otevřená na jednom uzlu funguje i když další požadavek dopadne na jiný uzel.

Windows nebo Docker

IIS, Kestrel nebo kontejnerový obraz, který si postavíte sami. Nic na integraci se mezi nimi nemění, kromě místa, kde je připojen licenční soubor.

Konverze ve stejném pipeline

S pluginem Converter běží DocumentConverter.ConvertAsync() ve stejném procesu — žádná druhá služba, žádné dočasné nahrávání, žádná zpětná cesta.

Integrace

Registrace a otevřený koncový bod

UserMayRead a ResolvePath jsou váš vlastní kód. To je podstata: Doconut se nikdy nedozví, které dokumenty existují nebo kdo je smí vidět.

Podporované platformy

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();

Podrobnosti

Pořadí registrace a úskalí

  • UseSession() musí být před UseDoconut(). Bezpečnost dokumentů na tom závisí.
  • UseDoconutResources() musí být před UseDoconut() a mělo by být pod stejnou autentizací jako zbytek aplikace.
  • Razor view injektuje Doconut.Viewer a generuje ReferenceCss / ReferenceScripts; jQuery se musí načíst před skripty prohlížeče.
  • Nastavte options.LicensePath z konfigurace, aby mohl být licenční soubor připojen jako tajemství místo aby byl zabudován do obrazu.

Často kladené otázky

Funguje to s .NET 6 stejně jako s .NET 8?

Ano. Obě verze jsou podporovány a používají stejnou architekturu DI-plus-middleware. Pro každou existují samostatné stránky, pokud potřebujete podrobnosti specifické pro verzi.

Existuje Razor komponenta nebo tag helper?

Ne, a je to úmyslné. Integrace je vždy middleware plus JavaScript widget, což udržuje stejnou integraci napříč Razor Pages, MVC, Web Forms a Blazorem místo rozdělení do čtyř.

Jak se chová za load balancerem?

Web farm a distribuované nasazení jsou podporovány sdílenou renderovací cache. Dokument otevřený na jednom uzlu zůstane čitelný, když následné požadavky dopadnou na jiný uzel.

Potřebuji mít na serveru nainstalovaný Office?

Ne. Rendering je nativní — neexistuje žádná interop s Office, žádný headless Word a žádná COM automatizace, o kterou by se muselo starat.

Vyzkoušejte to na vlastních dokumentech

Dočasná licence trvá několik minut k vyžádání a běží zcela na vašem počítači. Důležité soubory jsou ty, které již rozbíjejí váš současný prohlížeč.