DoconutExtensions

การลงทะเบียนบริการและมิดเดิลแวร์

DoconutExtensions (namespace Doconut.Middleware) คือคลาสสแตติกที่มีสามการเรียกใช้ที่โฮสต์ Doconut ทุกตัวทำ: การลงทะเบียนบริการหนึ่งรายการและการลงทะเบียนมิดเดิลแวร์สองรายการ.

csharp
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // ก่อน UseDoconut()
app.UseDoconut();

AddDoconut

text
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)

สร้าง DoconutOptions, ตรวจสอบความถูกต้องแบบ fail-fast (ดู DoconutOptions → การตรวจสอบ Startup), และลงทะเบียนกราฟบริการทั้งหมด:

บริการอายุการใช้งานบทบาท
DoconutOptionsSingletonอ็อบเจ็กต์การกำหนดค่า
Service cache sessionSingletonToken → แคชเซสชัน (IMemoryCache ถูกลงทะเบียนด้วยเช่นกัน)
IDoconutLicenseServiceSingletonใบอนุญาตโหลดหนึ่งครั้งที่การเริ่มต้น (ลำดับความสำคัญ: LicenseStream → LicenseContent → LicensePath → auto-search)
pipeline ภาพหน้าSingletonทำการประมวลผลภาพสำหรับหน้า (ลายน้ำ, หมุน, ปรับขนาด, คำอธิบายภาพ)
ความปลอดภัยเอกสาร (ที่เก็บการเข้าถึง)Singletonมอบสิทธิ์สำหรับการผูก token กับเซสชัน
ViewerTransientฟาซาดสสาธารณะสำหรับเปิด/ปิด
DocumentConverterTransientฟาซาดสการแปลง — ต้องการปลั๊กอิน Converter
DistributedDocumentPublisher—เผยแพร่ศิลปวัตถุของเอกสารไปยัง shared storage
Health check "doconut"—รายงานสถานะใบอนุญาต/วันหมดอายุผ่านการตรวจสอบสุขภาพของ ASP.NET

ไม่มีการเรียกที่เทียบเท่าในไลบรารี .NET Standard ก่อนหน้า มันสร้าง new Viewer(cache, accessor) ต่อคำขอและส่งตัวเลือกไปยังมิดเดิลแวร์; ทั้งสองถูกแทนที่ด้วยการลงทะเบียนเดียวนี้.

พฤติกรรมสองอย่างที่ควรรู้:

  • Converter requires its plugin. การแก้ไข DocumentConverter โดยไม่มี options.AddPlugin<ConverterPlugin>() จะทำให้เกิดข้อผิดพลาด:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • Plugin entitlement is validated at startup. ใบอนุญาตที่หายไป, ไฟล์ TRIAL แบบเก่า, หรือใบอนุญาตแบบชำระเงินที่ไม่มีความสามารถของปลั๊กอินที่ลงทะเบียน จะล้มเหลวที่เวลา AddDoconut(). การลงทะเบียนแบบชั่วคราว/เดโมจะคงอยู่จนกว่าจะถึงวันหมดอายุ, ในขณะที่ประตูรันไทม์จะยกเลิกความสามารถที่หมดอายุ.

การตรวจสอบสุขภาพรวมเข้ากับกลไกมาตรฐานของ ASP.NET Core — ทำแผนที่หากคุณต้องการสถานะใบอนุญาตบน endpoint สุขภาพของคุณ:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

เพิ่มมิดเดิลแวร์ภาพหน้า Doconut. มันตอบสนองต่อทุกคำขอที่มีพารามิเตอร์ query ?token= — หน้า, รูปย่อ, การค้นหา, คำอธิบาย, การกระทำของหน้า (ตารางคำขอเต็มอยู่ใน Core Concepts → How the Viewer Works). เมื่อ UnsafeMode เป็น false, ชั้นความปลอดภัยของเอกสารถูกเชื่อมต่อโดยอัตโนมัติก่อนมัน.

It takes no arguments. การส่งผ่านอินสแตนซ์ DoconutOptions ที่นี่เป็นรูปแบบของไลบรารีก่อนหน้าและไม่สามารถคอมไพล์ได้อีกต่อไป.

ตัวอย่างอ้างอิงกำหนดเส้นทางคำขอของวิดเจ็ตผ่านสาขาเส้นทาง, รักษารูปแบบคำขอแบบเดิม:

csharp
app.MapWhen(
    ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
    branch => branch.UseDoconut());

UseDoconutResources

text
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)

ให้บริการ JS, CSS, รูปภาพ และฟอนต์ที่ฝังอยู่ที่ DoconutOptions.ResourcesPath (ค่าเริ่มต้น /doconut-res). เหล่านี้คือไฟล์ที่ Viewer.ReferenceCss() / ReferenceScripts() สร้างแท็กสำหรับ.

Always call it before UseDoconut(). หากพื้นที่ตัวดูว่างเปล่าและคอนโซลของเบราว์เซอร์แสดง 404 สำหรับ /doconut-res/..., การเรียกนี้หายไปหรืออยู่ในตำแหน่งผิด.

นี่คือการแทนที่ที่สนับสนุนสำหรับการเชื่อมต่อมิดเดิลแวร์การจัดการทรัพยากรฝังด้วยตนเอง.

Serving from shared storage

การลงทะเบียนเพิ่มเติมสองรายการมีสำหรับการปรับใช้ที่โหนดที่เรนเดอร์เอกสารไม่จำเป็นต้องเป็นโหนดที่ให้บริการหน้าของมัน ทั้งสองครอบคลุมตั้งแต่ต้นจนจบใน การปรับใช้แบบกระจาย; ลายเซ็นคือ:

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // คิวเผยแพร่พื้นหลังแบบ opt-in
IServiceCollection AddDoconutDistributedWidgets(...)        // ที่เก็บข้อมูลสนับสนุนร่วมสำหรับการอัปโหลด widget

ด้านการอ่านเป็นมิดเดิลแวร์แยกจากแพคเกจ Doconut.Clouds:

text
IApplicationBuilder UseDoconutCloud<THandler>(
    this IApplicationBuilder app,
    Action<CloudOptions>? configure = null,
    string pathPrefix = "/doconut-cloud")
    where THandler : BaseCloudHandler

UseDoconutWebFarm(...) และ WebFarmOptions ไม่อยู่ในเวอร์ชันนี้ ดู คู่มือการย้าย สำหรับการแมปตั้งค่าแบบทีละรายการ.

Ordering recap

csharp
app.UseRouting();
app.UseSession();          // จำเป็นเมื่อ UnsafeMode = false
app.UseDoconutResources(); // การเรียก Doconut ครั้งที่ 1
app.UseDoconut();          // การเรียก Doconut ครั้งที่ 2 (หรือผ่านสาขา MapWhen)

หน้านี้เป็นประโยชน์หรือไม่?