
Bygg en säker dokumenthanteringsvisare i .NET med Doconut
Implementering av dokumenthantering med Doconut
Ett dokumenthantering arbetsflöde i en .NET-portal behöver vanligtvis tre saker:
- Ett sätt att läsa in PDF‑filer, Office‑filer, CAD‑ritningar eller bilder utan att skriva en visare från grunden.
- En säker token som knyter det inlästa dokumentet till den aktuella webbläsarsessionen.
- Ett rensningssteg som frigör minnet så snart användaren är klar.
Doconut tillhandahåller alla tre genom en enda Viewer‑tjänst, en lättviktig IMemoryCache‑session och explicita CloseDocument‑anrop.
1. Registrera visaren i DI‑behållaren
Under applikationens uppstart, lägg till Doconut‑tjänster i DI‑behållaren genom att anropa Doconut‑registreringsmetoden som beskrivs i den officiella dokumentationen. Detta steg registrerar visaren, licenshantering och den minnes‑cache som kommer att hålla dokumentsessioner.
Registreringen validerar licensen vid uppstart, så varje saknad eller ogiltig licens misslyckas omedelbart och du får veta problemet innan den första begäran når servern.
2. Infoga middleware som serverar sidbilder, miniatyrer och annoteringsdata
Konfigurera Doconut‑middleware i begäran‑pipeline så att varje begäran som innehåller en ?token=‑frågesträng hanteras av Doconut. Middleware verkställer den förvalda säkerhetsmarkören (secure-{token}) när UnsafeMode är falskt (standard) och levererar sidbilder, miniatyrer och annoteringsdata.
Att placera middleware på en dedikerad gren håller resten av din pipeline orörd och möjliggör horisontell skalning utan sticky‑sessioner.
3. Öppna ett dokument och hämta den opaka sessions‑tokenen
Skapa en enda endpoint som tar emot en filsökväg (eller en ström) och returnerar tokenen. Tokenen är den enda legitimationen som klient‑widgeten någonsin ser.
app.MapPost("/api/open", async (Viewer viewer) =>
{
// Token är ogenomskinlig — ge den till widgeten, logga eller spara den aldrig.
string token = await viewer.OpenDocumentAsync("wwwroot/files/Contract.pdf");
return Results.Ok(new { token });
});
Vad händer inuti OpenDocumentAsync
- Licensgrind – en ogiltig licens kastar
LicenseExceptionomedelbart. - Sessionskapande – Doconut väljer rätt formatvisare (PDF, Word, DWG, …) och lagrar motorn i
IMemoryCacheunder en GUID‑token. - Säkerhetsregistrering – med
UnsafeMode = falsebindas tokenen till anroparens ASP.NET‑session via ensecure-{token}‑markör. Endast den webbläsarsessionen kan begära sidor. - Token‑återlämning – klienten får tokenen och använder den för varje efterföljande begäran (
/DocImage.axd?token=…).
Den förvalda glidande utgångstiden är 60 minuter (konfigurerbar via DocOptions.TimeOut). Varje sidbegäran återställer klockan, så inaktiva sessioner försvinner automatiskt.
4. Rendera dokumentet på klientsidan
Från webbläsaren anropar du endpointen, hämtar tokenen och överlämnar den till Doconut‑widgeten:
fetch('/api/open', { method: 'POST' })
.then(r => r.json())
.then(d => {
const token = d.token;
objViewer.View(token); // JavaScript widget levererad av Doconut
});
Widgeten utfärdar internt sid‑, miniatyr‑, sök‑ och annoteringsbegäran som alla inkluderar samma token. Eftersom tokenen är knuten till server‑sidans session kan en illasinnad användare inte kapa en annan användares dokument.
5. Stäng dokumentet så snart användaren lämnar visaren
För stora PDF‑ eller CAD‑filer bör du frigöra renderingsmotorn omedelbart. Anropa CloseDocument från en server‑sidans endpoint eller från widgetens “unload”-händelse.
// Server‑side slutpunkt
app.MapPost("/api/close", (Viewer viewer, string token) =>
{
viewer.CloseDocument(token);
return Results.Ok();
});
// Direkt anrop från widgeten (om du exponerar token till backend)
viewer.CloseDocument(token);
CloseDocument tar bort sessionen från cachen, avyttrar den underliggande dokumentmotorn, raderar secure-{token}‑markören och återkallar åtkomstbehörigheten. Glidande utgång skulle så småningom göra samma sak, men en explicit stängning garanterar att minnet återtas omedelbart när användaren är klar.
6. Valfritt: Konvertera ett dokument på servern
Om ditt arbetsflöde kräver en PDF‑export av en uppladdad Word‑fil, aktivera Converter‑pluginet i Doconut‑konfigurationen (se dokumentationen). Efter att pluginet är registrerat kan du injicera DocumentConverter och anropa dess ConvertAsync‑metod. Konverteringen körs på servern, så du behöver aldrig ha Office installerat på webbservern.
7. Skalningsaspekter för företagsklassad dokumenthantering
- Stateless front‑ends – Widgeten håller aldrig dokumentdata; all tung bearbetning sker på servern.
- Distribuerad cache – Ersätt den förvalda minnes‑cachen med en distribuerad leverantör (Redis, NCache) om du kör flera webb‑farm‑noder. Token‑till‑session‑mappningen fungerar oförändrad eftersom middleware läser från den konfigurerade
IMemoryCache. - Bakgrundsjobb – Du kan för‑öppna dokument i en bakgrundsarbetsprocess, cacha tokenen och överlämna den till UI:t senare. Kom bara ihåg att varje token är engångsbruk per session; återanvändning kräver ett nytt
OpenDocumentAsync‑anrop.
Dessa mönster låter dig bygga en dokumenthantering‑plattform som skalar från en enkels‑server intranät‑portal till en multi‑region molntjänst utan att skriva om visarlogiken.
8. Snabbchecklista för en produktionsklar implementering
| Steg | Åtgärd |
|---|---|
| 1 | Registrera Doconut‑tjänster i Program.cs (validera licens). |
| 2 | Lägg till Doconut‑middleware på en dedikerad gren. |
| 3 | Exponera en /api/open‑endpoint som anropar OpenDocumentAsync. |
| 4 | Skicka den returnerade tokenen till objViewer.View(token) i klienten. |
| 5 | Anropa CloseDocument(token) när visaren är dold eller sidan laddas ur. |
| 6 | (Valfritt) Aktivera ConverterPlugin om du behöver server‑sidokonvertering. |
| 7 | (Valfritt) Byt ut IMemoryCache mot en distribuerad cache för horisontell skalning. |
Följ listan så har du ett komplett, säkert, högpresterande dokumenthantering‑flöde byggt på Doconut’s inbyggda .NET‑visare.