Razor Pages, MVC, dan API minimal
Penampil tidak terikat pada gaya hosting. Render div mount dari tampilan Razor atau halaman statis dan buka dokumen dari aksi controller, handler halaman, atau endpoint yang dipetakan.
Doconut terdaftar seperti semua hal lain di ASP.NET Core: layanan di dalam kontainer dan middleware di pipeline. Ia mewarisi otentikasi Anda, logging Anda, grafik DI Anda, dan cerita deployment Anda, karena ia berjalan di dalamnya bukan di sampingnya.
Masalah
Sebagian besar penampil dokumen hadir sebagai layanan terpisah. Itu berarti unit deployment kedua, sekumpulan kredensial kedua, lompatan jaringan yang harus dilalui dokumen Anda, dan hal kedua yang harus dihubungi seseorang pada pukul 2 pagi.
Doconut adalah sebuah pustaka. AddDoconut() menambahkannya ke koleksi layanan Anda; UseDoconut() menambahkannya ke pipeline Anda. Ia berjalan di bawah identitas proses Anda, melihat konfigurasi Anda, menulis ke logger Anda, dan dideploy oleh apa pun yang sudah mendepoy aplikasi Anda.
Konsekuensi praktisnya adalah otorisasi tetap di tempat yang semestinya. Anda memanggil OpenDocumentAsync() setelah pengecekan izin Anda sendiri, dan penampil hanya dapat merender apa yang Anda berikan.
Kemampuan
Penampil tidak terikat pada gaya hosting. Render div mount dari tampilan Razor atau halaman statis dan buka dokumen dari aksi controller, handler halaman, atau endpoint yang dipetakan.
Karena endpoint berada di pipeline Anda, [Authorize] berfungsi seperti biasanya. Tidak ada sistem identitas kedua untuk difederasikan.
Keamanan dokumen bergantung pada status sesi ASP.NET, itulah mengapa UseSession() harus didaftarkan sebelum UseDoconut(). Ini berarti persepsi penampil tentang siapa Anda sama dengan aplikasi.
Beberapa node di belakang load balancer berbagi cache render, sehingga sesi yang dibuka pada satu node tetap berfungsi ketika permintaan berikutnya jatuh di tempat lain.
IIS, Kestrel, atau image container yang Anda bangun sendiri. Tidak ada yang berubah dalam integrasi di antara mereka kecuali lokasi mount file lisensi.
Dengan plugin Converter, DocumentConverter.ConvertAsync() berjalan dalam proses yang sama — tidak ada layanan kedua, tidak ada unggahan sementara, tidak ada perjalanan bolak-balik.
Integrasi
UserMayRead dan ResolvePath adalah kode Anda sendiri. Itulah intinya: Doconut tidak pernah mengetahui dokumen mana yang ada atau siapa yang diizinkan melihatnya.
Platform yang didukung
// 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();Detail
Ya. Kedua-duanya didukung dan menggunakan arsitektur DI-plus-middleware yang sama. Ada halaman khusus untuk masing-masing jika Anda memerlukan detail versi tertentu.
Tidak, dan itu disengaja. Integrasi selalu berupa middleware plus widget JavaScript, yang menjaga integrasi tetap sama di Razor Pages, MVC, Web Forms, dan Blazor alih-alih terfragmentasi menjadi empat.
Web farm dan deployment terdistribusi didukung melalui cache render bersama. Dokumen yang dibuka pada satu node tetap dapat dibaca ketika permintaan berikutnya jatuh pada node lain.
Tidak. Rendering bersifat native — tidak ada interop Office, tidak ada Word headless, dan tidak ada otomasi COM yang harus dipantau.
Blazor
Rendering sisi server dengan widget yang dipasang bersih ke dalam siklus hidup interop Blazor — Server dan WebAssembly keduanya didukung.
BlazorWord
Rendering DOC/DOCX/RTF/ODT secara native tanpa instalasi Office, tanpa interop COM, dan tanpa otomasi sisi server.
WordLisensi sementara memerlukan beberapa menit untuk diminta dan berjalan sepenuhnya di mesin Anda sendiri. File yang penting adalah yang sudah mengganggu penampil Anda saat ini.