ASP.NET Core

Tiga panggilan middleware, bukan penulisan ulang

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.

3
panggilan middleware untuk diintegrasikan
75
ekstensi file bawaan
2
target deployment: Windows, Docker

Masalah

Biaya integrasi yang tidak ada yang alokasikan

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

Apa yang diberikan middleware kepada Anda

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.

Otentikasi Anda, tidak berubah

Karena endpoint berada di pipeline Anda, [Authorize] berfungsi seperti biasanya. Tidak ada sistem identitas kedua untuk difederasikan.

Keamanan dokumen berbasis sesi

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.

Siap untuk web farm

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.

Windows atau Docker

IIS, Kestrel, atau image container yang Anda bangun sendiri. Tidak ada yang berubah dalam integrasi di antara mereka kecuali lokasi mount file lisensi.

Konversi dalam pipeline yang sama

Dengan plugin Converter, DocumentConverter.ConvertAsync() berjalan dalam proses yang sama — tidak ada layanan kedua, tidak ada unggahan sementara, tidak ada perjalanan bolak-balik.

Integrasi

Registrasi dan endpoint terbuka

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

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

Detail

Urutan registrasi dan hal-hal penting

  • UseSession() harus dipanggil sebelum UseDoconut(). Keamanan dokumen bergantung padanya.
  • UseDoconutResources() harus dipanggil sebelum UseDoconut(), dan harus berada di belakang otentikasi yang sama dengan sisa aplikasi.
  • Tampilan Razor menyuntikkan Doconut.Viewer dan menghasilkan ReferenceCss / ReferenceScripts; jQuery harus dimuat sebelum skrip penampil.
  • Setel options.LicensePath dari konfigurasi sehingga file lisensi dapat dimount sebagai rahasia, bukan dibundel ke dalam image.

Pertanyaan yang sering diajukan

Apakah ini bekerja dengan .NET 6 serta .NET 8?

Ya. Kedua-duanya didukung dan menggunakan arsitektur DI-plus-middleware yang sama. Ada halaman khusus untuk masing-masing jika Anda memerlukan detail versi tertentu.

Apakah ada komponen Razor atau tag helper?

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.

Bagaimana perilakunya di belakang load balancer?

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.

Apakah saya perlu menginstal Office di server?

Tidak. Rendering bersifat native — tidak ada interop Office, tidak ada Word headless, dan tidak ada otomasi COM yang harus dipantau.

Coba dengan dokumen Anda sendiri

Lisensi sementara memerlukan beberapa menit untuk diminta dan berjalan sepenuhnya di mesin Anda sendiri. File yang penting adalah yang sudah mengganggu penampil Anda saat ini.