Razor Pages, MVC และ API ขั้นต่ำ
ตัวดูไม่ได้ผูกติดกับรูปแบบการโฮสต์ใด ๆ เรนเดอร์ div ที่เมานท์จาก Razor view หรือหน้า static แล้วเปิดเอกสารจาก action ของ controller, handler ของหน้า หรือ endpoint ที่แมพไว้.
Doconut ถูกลงทะเบียนในลักษณะเดียวกับทุกอย่างอื่นใน ASP.NET Core: เป็นบริการในคอนเทนเนอร์และ middleware ใน pipeline. มันสืบทอดการตรวจสอบสิทธิ์ของคุณ, การบันทึกของคุณ, กราฟ DI ของคุณและเรื่องการปรับใช้ของคุณ, เพราะมันทำงานภายในพวกมันแทนที่จะอยู่ข้างนอก.
ปัญหา
ตัวดูเอกสารส่วนใหญ่มาพร้อมเป็นบริการแยกต่างหาก ซึ่งหมายถึงหน่วยการปรับใช้ที่สอง, ชุดข้อมูลรับรองที่สอง, การกระโดดเครือข่ายที่เอกสารของคุณต้องผ่าน, และอีกหนึ่งเรื่องที่ต้องแจ้งให้ใครบางคนทราบตอนตี 2.
Doconut เป็นไลบรารี AddDoconut() ใส่ลงในคอลเลกชันบริการของคุณ; UseDoconut() ใส่ลงใน pipeline ของคุณ มันทำงานภายใต้อัตลักษณ์ของกระบวนการของคุณ, เห็นการกำหนดค่าของคุณ, เขียนลงใน logger ของคุณ, และถูกปรับใช้โดยสิ่งที่ปรับใช้แอปพลิเคชันของคุณอยู่แล้ว.
ผลลัพธ์เชิงปฏิบัติคือการอนุญาตจะอยู่ในที่ที่ควรอยู่ คุณเรียก OpenDocumentAsync() หลังจากตรวจสอบสิทธิ์ของคุณเอง, และตัวดูจะสามารถเรนเดอร์เฉพาะสิ่งที่คุณมอบให้เท่านั้น.
ความสามารถ
ตัวดูไม่ได้ผูกติดกับรูปแบบการโฮสต์ใด ๆ เรนเดอร์ div ที่เมานท์จาก Razor view หรือหน้า static แล้วเปิดเอกสารจาก action ของ controller, handler ของหน้า หรือ endpoint ที่แมพไว้.
เนื่องจาก endpoint อยู่ใน pipeline ของคุณ, [Authorize] ทำงานเช่นเคย ไม่มีกลไกอัตลักษณ์ที่สองให้ทำ federation.
ความปลอดภัยของเอกสารพึ่งพา ASP.NET session state, ดังนั้น UseSession() ต้องลงทะเบียนก่อน UseDoconut(). หมายความว่าความเข้าใจของตัวดูว่าคุณคือใครเหมือนกับของแอปพลิเคชัน.
หลายโหนดที่อยู่หลัง load balancer แบ่งส่วนแคชการเรนเดอร์, ดังนั้น session ที่เปิดบนโหนดหนึ่งจะทำงานต่อเมื่อคำขอถัดไปไปยังโหนดอื่น.
IIS, Kestrel หรืออิมเมจคอนเทนเนอร์ที่คุณสร้างเอง ไม่มีอะไรเปลี่ยนแปลงในการบูรณาการระหว่างพวกมัน ยกเว้นตำแหน่งที่ไฟล์ใบอนุญาตถูกเมานท์.
ด้วยปลั๊กอิน Converter, DocumentConverter.ConvertAsync() ทำงานในกระบวนการเดียว — ไม่มีบริการที่สอง, ไม่มีการอัปโหลดชั่วคราว, ไม่มีการเดินทางกลับ.
การรวมระบบ
UserMayRead และ ResolvePath เป็นโค้ดของคุณเอง นั่นคือจุดสำคัญ: Doconut ไม่เคยรู้ว่าเอกสารใดมีอยู่หรือใครได้รับอนุญาตให้ดู.
แพลตฟอร์มที่รองรับ
// 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();รายละเอียด
ใช่ ทั้งสองรุ่นได้รับการสนับสนุนและใช้สถาปัตยกรรม DI-plus-middleware เดียวกัน มีหน้าเฉพาะสำหรับแต่ละรุ่นหากคุณต้องการรายละเอียดตามเวอร์ชัน.
ไม่มี และเป็นการตั้งใจไว้ การบูรณาการจะเป็น middleware พร้อมวิดเจ็ต JavaScript เสมอ ซึ่งทำให้การบูรณาการเดียวกันใช้ได้กับ Razor Pages, MVC, Web Forms และ Blazor แทนการแยกเป็นสี่ส่วน.
Web farm และการปรับใช้แบบกระจายได้รับการสนับสนุนผ่านแคชการเรนเดอร์ที่แชร์ เอกสารที่เปิดบนโหนดหนึ่งจะยังอ่านได้เมื่อคำขอถัดไปไปยังโหนดอื่น.
ไม่ การเรนเดอร์เป็นแบบเนทีฟ — ไม่มีการ interop กับ Office, ไม่มี Word แบบ headless, และไม่มีการอัตโนมัติ COM ที่ต้องดูแล.
Blazor
การเรนเดอร์บนเซิร์ฟเวอร์พร้อมวิดเจ็ตที่เมานท์อย่างสะอาดเข้าสู่วงจรชีวิต interop ของ Blazor — รองรับทั้ง Server และ WebAssembly.
BlazorWord
การแสดงผล DOC/DOCX/RTF/ODT แบบเนทีฟโดยไม่มีการติดตั้ง Office, ไม่มี COM interop และไม่มีการอัตโนมัติฝั่งเซิร์ฟเวอร์.
Wordใบอนุญาตชั่วคราวใช้เวลาขอเพียงไม่กี่นาทีและทำงานทั้งหมดบนเครื่องของคุณเอง ไฟล์ที่สำคัญคือไฟล์ที่กำลังทำให้โปรแกรมดูของคุณปัจจุบันทำงานไม่ถูกต้องอยู่แล้ว.