ASP.NET Core

ثلاث استدعاءات Middleware، لا إعادة كتابة

يتم تسجيل Doconut كما يتم تسجيل كل شيء آخر في ASP.NET Core: خدمة في الحاوية وMiddleware في خط الأنابيب. يرث المصادقة الخاصة بك، وتسجيلك، ورسم بياني DI الخاص بك، وقصة النشر الخاصة بك، لأنه يعمل داخلها بدلاً من جنبها.

3
استدعاءات Middleware للتكامل
75
امتدادات ملفات جاهزة
2
أهداف النشر: Windows، Docker

المشكلة

ضريبة التكامل التي لا يخصص لها أحد ميزانية

معظم عارضي المستندات تأتي كخدمة منفصلة. هذا يعني وحدة نشر ثانية، مجموعة ثانية من بيانات الاعتماد، قفزة شبكة تمر عبرها مستنداتك الآن، وشئًا ثانيًا لتزعج أحدًا به في الساعة 2 صباحًا.

Doconut هي مكتبة. AddDoconut() يضعها في مجموعة الخدمات الخاصة بك؛ UseDoconut() يضعها في خط الأنابيب. تعمل تحت هوية عمليتك، ترى إعداداتك، تكتب إلى مسجلك، وتُنشر بواسطة أي شيء ينشر تطبيقك بالفعل.

الع consequence العملية هي أن التفويض يبقى في مكانه. تستدعي OpenDocumentAsync() بعد فحص الأذونات الخاص بك، ولا يمكن للعارض إلا أن يعرض ما قررت تسليمه.

القدرات

ما يقدمه لك Middleware

Razor Pages، MVC وAPIs الحد الأدنى

العارض غير مرتبط بنمط استضافة. قم بعرض div التثبيت من عرض Razor أو صفحة ثابتة وافتح المستند من إجراء تحكم، معالج صفحة أو نقطة نهاية مُعينة.

المصادقة الخاصة بك، دون تغيير

نظرًا لأن نقاط النهاية تعيش في خط الأنابيب الخاص بك، فإن [Authorize] يعمل كما كان دائمًا. لا يوجد نظام هوية ثانٍ للتكامل معه.

أمان المستند المدعوم بالجلسة

أمان المستند يعتمد على حالة جلسة ASP.NET، لذلك يجب تسجيل UseSession() قبل UseDoconut(). وهذا يعني أن مفهوم العارض عن هويتك هو نفسه مفهوم التطبيق.

جاهز لمزرعة الويب

عقد متعددة خلف موازن تحميل تشارك ذاكرة التخزين المؤقت للعرض، لذا تستمر الجلسة المفتوحة على عقدة واحدة في العمل عندما تصل الطلبات التالية إلى عقدة أخرى.

Windows أو Docker

IIS، Kestrel، أو صورة حاوية تبنيها بنفسك. لا شيء يتغير في التكامل بينها إلا مكان تركيب ملف الترخيص.

التحويل في نفس خط الأنابيب

مع إضافة Converter، يعمل DocumentConverter.ConvertAsync() في نفس العملية — لا خدمة ثانية، لا تحميل مؤقت، لا جولة إضافية.

التكامل

التسجيل ونقطة نهاية مفتوحة

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 يحقن Doconut.Viewer ويصدر ReferenceCss / ReferenceScripts؛ يجب تحميل jQuery قبل سكريبتات العارض.
  • قم بتعيين options.LicensePath من الإعدادات حتى يمكن تركيب ملف الترخيص كسرّ وليس مدمجًا في الصورة.

الأسئلة المتكررة

هل يعمل مع .NET 6 كما يعمل مع .NET 8؟

نعم. كلاهما مدعومان ويستخدمان نفس بنية DI زائد Middleware. هناك صفحات مخصصة لكل منهما إذا كنت بحاجة إلى تفاصيل خاصة بالإصدار.

هل هناك مكوّن Razor أو مساعد علامة؟

لا، وهذا مقصود. التكامل دائمًا يكون Middleware بالإضافة إلى عنصر JavaScript، مما يحافظ على صلاحية التكامل نفسه عبر Razor Pages، MVC، Web Forms وBlazor بدلاً من تجزئته إلى أربعة.

كيف يتصرف خلف موازن تحميل؟

مزرعة الويب والنشر الموزع مدعومان عبر ذاكرة تخزين مؤقت مشتركة للعرض. المستند المفتوح على عقدة واحدة يظل قابلًا للقراءة عندما تصل الطلبات اللاحقة إلى عقدة أخرى.

هل أحتاج إلى تثبيت Office على الخادم؟

لا. العرض أصلي — لا يوجد تفاعل مع Office، ولا Word بدون واجهة، ولا أتمتة COM لتدبيرها.

جرّبه على مستنداتك الخاصة

رخصة مؤقتة تستغرق بضع دقائق لطلبها وتعمل بالكامل على جهازك الخاص. الملفات المهمة هي تلك التي تُعطِّل عارضك الحالي بالفعل.