ASP.NET Core

Trzy wywołania middleware, a nie przepisanie

Doconut jest rejestrowany tak jak wszystko inne w ASP.NET Core: jako usługa w kontenerze i middleware w potoku. Dziedziczy twoją autoryzację, logowanie, graf DI oraz historię wdrożenia, ponieważ działa wewnątrz nich, a nie obok nich.

3
wywołania middleware do integracji
75
rozszerzenia plików dostępne od razu
2
cele wdrożenia: Windows, Docker

Problem

Podatek integracyjny, na który nikt nie przeznacza budżetu

Większość przeglądarek dokumentów pojawia się jako osobna usługa. Oznacza to drugą jednostkę wdrożeniową, drugi zestaw poświadczeń, przeskok sieciowy, przez który teraz podróżują twoje dokumenty, oraz drugą rzecz, o której trzeba informować kogoś o 2 nad ranem.

Doconut jest biblioteką. AddDoconut() umieszcza ją w kolekcji usług; UseDoconut() umieszcza ją w potoku. Działa pod tożsamością twojego procesu, widzi twoją konfigurację, zapisuje do twojego loggera i jest wdrażana przez to, co już wdraża twoją aplikację.

Praktycznym konsekwencją jest to, że autoryzacja pozostaje tam, gdzie powinna być. Wywołujesz OpenDocumentAsync() po własnym sprawdzeniu uprawnień, a przeglądarka może renderować wyłącznie to, co postanowiłeś jej przekazać.

Możliwości

Co daje ci middleware

Razor Pages, MVC i minimalne API

Przeglądarka nie jest powiązana z konkretnym stylem hostingu. Renderuj element montujący z widoku Razor lub statycznej strony i otwórz dokument z akcji kontrolera, obsługi strony lub mapowanego punktu końcowego.

Twoja autoryzacja, niezmieniona

Ponieważ punkty końcowe znajdują się w twoim potoku, [Authorize] działa tak, jak zawsze. Nie ma drugiego systemu tożsamości, z którym trzeba się federować.

Bezpieczeństwo dokumentów oparte na sesji

Bezpieczeństwo dokumentów opiera się na stanie sesji ASP.NET, dlatego UseSession() musi być zarejestrowane przed UseDoconut(). Oznacza to, że pojęcie przeglądarki o tym, kim jesteś, jest takie samo jak aplikacji.

Gotowy na farmę webową

Wiele węzłów za load balancerem współdzieli pamięć podręczną renderowania, więc sesja otwarta na jednym węźle działa dalej, gdy kolejny request trafi w inne miejsce.

Windows lub Docker

IIS, Kestrel lub obraz kontenera, który budujesz samodzielnie. Nic w integracji nie zmienia się między nimi, poza miejscem montowania pliku licencji.

Konwersja w tym samym potoku

Z wtyczką Converter, DocumentConverter.ConvertAsync() działa w tym samym procesie — bez drugiej usługi, bez tymczasowego uploadu, bez dodatkowej podróży.

Integracja

Rejestracja i otwarty punkt końcowy

UserMayRead i ResolvePath to twój własny kod. To jest sedno: Doconut nigdy nie dowiaduje się, które dokumenty istnieją ani kto ma do nich dostęp.

Obsługiwane 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();

Szczegóły

Kolejność rejestracji i pułapki

  • UseSession() musi wystąpić przed UseDoconut(). Bezpieczeństwo dokumentów od tego zależy.
  • UseDoconutResources() musi wystąpić przed UseDoconut() i powinno znajdować się za tą samą autoryzacją co reszta aplikacji.
  • Widok Razor wstrzykuje Doconut.Viewer i generuje ReferenceCss / ReferenceScripts; jQuery musi zostać załadowany przed skryptami przeglądarki.
  • Ustaw options.LicensePath w konfiguracji, aby plik licencji mógł być zamontowany jako sekret, a nie wbudowany w obraz.

Najczęściej zadawane pytania

Czy działa z .NET 6 tak samo jak z .NET 8?

Tak. Oba są wspierane i używają tej samej architektury DI-plus-middleware. Istnieją dedykowane strony dla każdego, jeśli potrzebujesz szczegółów specyficznych dla wersji.

Czy istnieje komponent Razor lub tag helper?

Nie, i jest to zamierzone. Integracja zawsze polega na middleware plus widżet JavaScript, co utrzymuje tę samą integrację ważną we wszystkich Razor Pages, MVC, Web Forms i Blazor, zamiast fragmentować na cztery.

Jak zachowuje się za load balancerem?

Farma webowa i rozproszone wdrożenie są wspierane dzięki współdzielonej pamięci podręcznej renderowania. Dokument otwarty na jednym węźle pozostaje czytelny, gdy kolejne żądania trafią do innego.

Czy potrzebuję zainstalowanego Office na serwerze?

Nie. Renderowanie jest natywne — nie ma interfejsu Office, nie ma headless Word ani automatyzacji COM do obsługi.

Wypróbuj to na własnych dokumentach

Tymczasowa licencja wymaga kilku minut na zamówienie i działa w pełni na Twoim komputerze. Najważniejsze pliki to te, które już psują Twój obecny podgląd.