ASP.NET Core

سه فراخوانی میدلور، نه بازنویسی

Doconut به همان شیوه‌ای که همه چیزهای دیگر در ASP.NET Core ثبت می‌شوند ثبت می‌شود: یک سرویس در کانتینر و میدلور در خط لوله. این سرویس احراز هویت، لاگ‌گیری، گراف DI و داستان استقرار شما را به ارث می‌برد، زیرا داخل آن‌ها اجرا می‌شود نه در کنار آن‌ها.

3
فراخوانی میدلور برای ادغام
75
پسوندهای فایل به‌صورت پیش‌فرض
2
هدف‌های استقرار: ویندوز، داکر

مشکل

هزینه ادغام که هیچ‌کس برای آن بودجه نمی‌گذارد

اکثر نمایشگرهای سند به‌عنوان سرویس جداگانه می‌آیند. این به معنای یک واحد استقرار دوم، مجموعه‌ای دوم از اعتبارها، یک پرش شبکه‌ای که اسناد شما اکنون از آن عبور می‌کنند، و یک مورد دوم برای اطلاع‌رسانی به کسی در ساعت ۲ بامداد است.

Doconut یک کتابخانه است. AddDoconut() آن را در مجموعه سرویس‌های شما قرار می‌دهد؛ UseDoconut() آن را در خط لوله شما قرار می‌دهد. تحت هویت فرآیند شما اجرا می‌شود، پیکربندی شما را می‌بیند، در لاگر شما می‌نویسد و توسط هر چیزی که قبلاً برنامه شما را استقرار می‌دهد، استقرار می‌شود.

نتیجه عملی این است که احراز هویت در جای خود می‌ماند. شما پس از بررسی مجوز خود، OpenDocumentAsync() را فراخوانی می‌کنید و نمایشگر فقط می‌تواند آنچه را که شما به آن واگذار کرده‌اید، رندر کند.

قابلیت‌ها

آنچه میدلور به شما می‌دهد

Razor Pages، MVC و APIهای مینیمال

نمایشگر به یک سبک میزبانی وابسته نیست. div سوارشده را از یک نمای Razor یا صفحه ایستا رندر کنید و سند را از یک اکشن کنترلر، یک هندلر صفحه یا یک نقطه انتهایی نقشه‌برداری شده باز کنید.

احراز هویت شما، بدون تغییر

به‌دلیل اینکه نقطه‌های انتهایی در خط لوله شما هستند، [Authorize] همان‌طور که همیشه کار می‌کرد عمل می‌کند. هیچ سیستم هویت دوم برای ادغام وجود ندارد.

امنیت سند مبتنی بر جلسه

امنیت سند بر روی وضعیت جلسه ASP.NET استوار است، به همین دلیل UseSession() باید قبل از UseDoconut() ثبت شود. این به این معنی است که مفهوم نمایشگر از هویت شما همانند برنامه است.

آماده برای فارم وب

چندین گره پشت یک لود بالانسر کش رندر را به اشتراک می‌گذارند، بنابراین یک جلسه که در یک گره باز شده است، هنگام دریافت درخواست بعدی در گره دیگری نیز کار می‌کند.

ویندوز یا داکر

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‑به‌اضافه‑میدلور استفاده می‌کنند. اگر به جزئیات نسخه‑خاص نیاز دارید، صفحات اختصاصی برای هر کدام وجود دارد.

آیا یک کامپوننت Razor یا یک tag helper وجود دارد؟

خیر، و این عمدی است. ادغام همیشه میدلور به‌اضافه ویجت JavaScript است، که یکپارچگی یکسان را در Razor Pages، MVC، Web Forms و Blazor حفظ می‌کند به‌جای تقسیم به چهار بخش.

رفتار آن پشت لود بالانسر چگونه است؟

فارم وب و استقرار توزیع‌شده از طریق کش رندر مشترک پشتیبانی می‌شوند. سندی که در یک گره باز شده است، هنگام دریافت درخواست‌های بعدی در گره دیگری نیز قابل خواندن می‌ماند.

آیا نیاز به نصب Office روی سرور دارم؟

خیر. رندر به‌صورت بومی است — هیچ تعامل Office، Word بدون سر، و هیچ خودکارسازی COM برای مراقبت وجود ندارد.

آن را با اسناد خود امتحان کنید

یک مجوز موقت چند دقیقه زمان می‌برد تا درخواست شود و به‌صورت کامل بر روی دستگاه شما اجرا می‌شود. فایل‌هایی که مهم هستند، همان فایل‌هایی هستند که در حال حاضر نمایشگر فعلی شما را خراب می‌کنند.