ASP.NET Core

การเรียก middleware สามครั้ง, ไม่ใช่การเขียนใหม่

Doconut ถูกลงทะเบียนในลักษณะเดียวกับทุกอย่างอื่นใน ASP.NET Core: เป็นบริการในคอนเทนเนอร์และ middleware ใน pipeline. มันสืบทอดการตรวจสอบสิทธิ์ของคุณ, การบันทึกของคุณ, กราฟ DI ของคุณและเรื่องการปรับใช้ของคุณ, เพราะมันทำงานภายในพวกมันแทนที่จะอยู่ข้างนอก.

3
การเรียก middleware เพื่อรวมระบบ
75
ส่วนขยายไฟล์ที่พร้อมใช้งาน
2
เป้าหมายการปรับใช้: Windows, Docker

ปัญหา

ภาษีการบูรณาการที่ไม่มีใครจัดสรรงบประมาณ

ตัวดูเอกสารส่วนใหญ่มาพร้อมเป็นบริการแยกต่างหาก ซึ่งหมายถึงหน่วยการปรับใช้ที่สอง, ชุดข้อมูลรับรองที่สอง, การกระโดดเครือข่ายที่เอกสารของคุณต้องผ่าน, และอีกหนึ่งเรื่องที่ต้องแจ้งให้ใครบางคนทราบตอนตี 2.

Doconut เป็นไลบรารี AddDoconut() ใส่ลงในคอลเลกชันบริการของคุณ; UseDoconut() ใส่ลงใน pipeline ของคุณ มันทำงานภายใต้อัตลักษณ์ของกระบวนการของคุณ, เห็นการกำหนดค่าของคุณ, เขียนลงใน logger ของคุณ, และถูกปรับใช้โดยสิ่งที่ปรับใช้แอปพลิเคชันของคุณอยู่แล้ว.

ผลลัพธ์เชิงปฏิบัติคือการอนุญาตจะอยู่ในที่ที่ควรอยู่ คุณเรียก OpenDocumentAsync() หลังจากตรวจสอบสิทธิ์ของคุณเอง, และตัวดูจะสามารถเรนเดอร์เฉพาะสิ่งที่คุณมอบให้เท่านั้น.

ความสามารถ

สิ่งที่ middleware มอบให้คุณ

Razor Pages, MVC และ API ขั้นต่ำ

ตัวดูไม่ได้ผูกติดกับรูปแบบการโฮสต์ใด ๆ เรนเดอร์ div ที่เมานท์จาก Razor view หรือหน้า static แล้วเปิดเอกสารจาก action ของ controller, handler ของหน้า หรือ endpoint ที่แมพไว้.

การตรวจสอบสิทธิ์ของคุณ, ไม่เปลี่ยนแปลง

เนื่องจาก endpoint อยู่ใน pipeline ของคุณ, [Authorize] ทำงานเช่นเคย ไม่มีกลไกอัตลักษณ์ที่สองให้ทำ federation.

ความปลอดภัยของเอกสารที่อิงจาก Session

ความปลอดภัยของเอกสารพึ่งพา ASP.NET session state, ดังนั้น UseSession() ต้องลงทะเบียนก่อน UseDoconut(). หมายความว่าความเข้าใจของตัวดูว่าคุณคือใครเหมือนกับของแอปพลิเคชัน.

พร้อมใช้งานใน Web farm

หลายโหนดที่อยู่หลัง load balancer แบ่งส่วนแคชการเรนเดอร์, ดังนั้น session ที่เปิดบนโหนดหนึ่งจะทำงานต่อเมื่อคำขอถัดไปไปยังโหนดอื่น.

Windows หรือ Docker

IIS, Kestrel หรืออิมเมจคอนเทนเนอร์ที่คุณสร้างเอง ไม่มีอะไรเปลี่ยนแปลงในการบูรณาการระหว่างพวกมัน ยกเว้นตำแหน่งที่ไฟล์ใบอนุญาตถูกเมานท์.

การแปลงใน pipeline เดียวกัน

ด้วยปลั๊กอิน Converter, DocumentConverter.ConvertAsync() ทำงานในกระบวนการเดียว — ไม่มีบริการที่สอง, ไม่มีการอัปโหลดชั่วคราว, ไม่มีการเดินทางกลับ.

การรวมระบบ

การลงทะเบียนและ endpoint เปิด

UserMayRead และ ResolvePath เป็นโค้ดของคุณเอง นั่นคือจุดสำคัญ: Doconut ไม่เคยรู้ว่าเอกสารใดมีอยู่หรือใครได้รับอนุญาตให้ดู.

แพลตฟอร์มที่รองรับ

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

รายละเอียด

ลำดับการลงทะเบียนและข้อควรระวัง

  • UseSession() ต้องมาก่อน UseDoconut(). ความปลอดภัยของเอกสารขึ้นอยู่กับมัน.
  • UseDoconutResources() ต้องมาก่อน UseDoconut() และควรอยู่หลังการตรวจสอบสิทธิ์เดียวกับส่วนอื่นของแอป.
  • Razor view จะ inject Doconut.Viewer และส่งออก ReferenceCss / ReferenceScripts; jQuery ต้องโหลดก่อนสคริปต์ของตัวดู.
  • ตั้งค่า options.LicensePath จากการกำหนดค่าเพื่อให้ไฟล์ใบอนุญาตสามารถเมานท์เป็นความลับแทนการฝังลงในอิมเมจ.

คำถามที่พบบ่อย

มันทำงานกับ .NET 6 เช่นเดียวกับ .NET 8 หรือไม่?

ใช่ ทั้งสองรุ่นได้รับการสนับสนุนและใช้สถาปัตยกรรม DI-plus-middleware เดียวกัน มีหน้าเฉพาะสำหรับแต่ละรุ่นหากคุณต้องการรายละเอียดตามเวอร์ชัน.

มี Razor component หรือ tag helper หรือไม่?

ไม่มี และเป็นการตั้งใจไว้ การบูรณาการจะเป็น middleware พร้อมวิดเจ็ต JavaScript เสมอ ซึ่งทำให้การบูรณาการเดียวกันใช้ได้กับ Razor Pages, MVC, Web Forms และ Blazor แทนการแยกเป็นสี่ส่วน.

มันทำงานอย่างไรเมื่ออยู่หลัง load balancer?

Web farm และการปรับใช้แบบกระจายได้รับการสนับสนุนผ่านแคชการเรนเดอร์ที่แชร์ เอกสารที่เปิดบนโหนดหนึ่งจะยังอ่านได้เมื่อคำขอถัดไปไปยังโหนดอื่น.

ฉันต้องติดตั้ง Office บนเซิร์ฟเวอร์หรือไม่?

ไม่ การเรนเดอร์เป็นแบบเนทีฟ — ไม่มีการ interop กับ Office, ไม่มี Word แบบ headless, และไม่มีการอัตโนมัติ COM ที่ต้องดูแล.

ลองใช้กับเอกสารของคุณเอง

ใบอนุญาตชั่วคราวใช้เวลาขอเพียงไม่กี่นาทีและทำงานทั้งหมดบนเครื่องของคุณเอง ไฟล์ที่สำคัญคือไฟล์ที่กำลังทำให้โปรแกรมดูของคุณปัจจุบันทำงานไม่ถูกต้องอยู่แล้ว.