ASP.NET Core

Tre middleware-anrop, ingen omskrivning

Doconut registreras på samma sätt som allt annat i ASP.NET Core: en tjänst i containern och middleware i pipelinen. Den ärver din autentisering, din loggning, ditt DI‑graf och din distributionshistorik, eftersom den körs inuti dem snarare än bredvid dem.

3
middleware-anrop att integrera
75
filändelser direkt ur lådan
2
distributionsmål: Windows, Docker

Problemet

Integrationsskatten som ingen budgeterar för

De flesta dokumentvisare levereras som en separat tjänst. Det innebär en andra distributionsenhet, ett andra set med autentiseringsuppgifter, ett nätverkshopp som dina dokument nu måste färdas över, och en annan sak att väcka någon om klockan två på morgonen.

Doconut är ett bibliotek. AddDoconut() lägger till det i din tjänstekollektion; UseDoconut() lägger till det i din pipeline. Det körs under din processidentitet, ser din konfiguration, skriver till din logger och distribueras av det som redan distribuerar din applikation.

Den praktiska konsekvensen är att auktorisationen förblir där den hör hemma. Du anropar OpenDocumentAsync() efter din egen behörighetskontroll, och visaren kan bara rendera det du har valt att ge den.

Funktioner

Vad middleware ger dig

Razor Pages, MVC och minimal-API:er

Visaren är inte bunden till någon hosting‑stil. Rendera monterings‑diven från en Razor‑vy eller en statisk sida och öppna dokumentet från en controller‑action, en sidhanterare eller en mappad endpoint.

Din autentisering, oförändrad

Eftersom endpointarna lever i din pipeline fungerar [Authorize] som alltid. Det finns inget andra identitetssystem att federera med.

Sessionsbaserad dokumentsäkerhet

Dokumentsäkerhet bygger på ASP.NET‑sessionsstate, vilket är anledningen till att UseSession() måste registreras före UseDoconut(). Det betyder att visarens uppfattning om vem du är är densamma som applikationens.

Webbfarm redo

Flera noder bakom en lastbalanserare delar renderingscachen, så en session som öppnas på en nod fortsätter fungera när nästa begäran hamnar någon annanstans.

Windows eller Docker

IIS, Kestrel eller en container‑image du bygger själv. Inget i integrationen förändras mellan dem förutom var licensfilen monteras.

Konvertering i samma pipeline

Med Converter‑pluginet körs DocumentConverter.ConvertAsync() i samma process — ingen andra tjänst, ingen tillfällig uppladdning, ingen rundresa.

Integration

Registrering och en öppen endpoint

UserMayRead och ResolvePath är din egen kod. Det är poängen: Doconut får aldrig reda på vilka dokument som finns eller vem som får se dem.

Stödda plattformar

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

Detaljer

Registreringsordning och fallgropar

  • UseSession() måste komma före UseDoconut(). Dokumentsäkerheten beror på det.
  • UseDoconutResources() måste komma före UseDoconut() och bör ligga bakom samma autentisering som resten av appen.
  • Razor‑vyn injicerar Doconut.Viewer och avger ReferenceCss / ReferenceScripts; jQuery måste laddas innan visarskript.
  • Ställ in options.LicensePath från konfigurationen så att licensfilen kan monteras som en hemlighet istället för att bakas in i imagen.

Vanliga frågor

Fungerar det med .NET 6 lika bra som med .NET 8?

Ja. Båda stöds och använder samma DI‑plus‑middleware‑arkitektur. Det finns dedikerade sidor för var och en om du behöver versionsspecifik information.

Finns det en Razor‑komponent eller en tag‑helper?

Nej, och det är avsiktligt. Integration är alltid middleware plus JavaScript‑widgeten, vilket håller samma integration giltig över Razor Pages, MVC, Web Forms och Blazor istället för att fragmenteras i fyra.

Hur fungerar det bakom en lastbalanserare?

Webbfarm och distribuerad distribution stödjs via en gemensam renderingscache. Ett dokument som öppnas på en nod förblir läsbart när efterföljande begäran hamnar på en annan.

Behöver jag Office installerat på servern?

Nej. Rendering är inbyggd — det finns ingen Office‑interop, ingen headless Word och ingen COM‑automation att sköta.

Prova det med dina egna dokument

En tillfällig licens tar några minuter att begära och körs helt på din egen maskin. De filer som är viktiga är de som redan stör din nuvarande visare.