ASP.NET Core

שלוש קריאות Middleware, לא כתיבה מחדש

Doconut נרשם כמו כל דבר אחר ב‑ASP.NET Core: שירות במכולה ו‑middleware בצינור. הוא יורש את האימות שלך, את הרישום שלך, את גרף ה‑DI שלך ואת סיפור הפריסה שלך, מכיוון שהוא פועל בתוכם ולא לצידם.

3
קריאות middleware לשילוב
75
סיומות קבצים מובנות
2
יעדי פריסה: Windows, Docker

הבעיה

מס ההטמעה שאף אחד לא מתכנן

רוב צופי המסמכים מגיעים כשירות נפרד. משמעות הדבר היא יחידת פריסה שנייה, סט נוסף של אישורים, קפיצה ברשת שהמסמכים שלך עוברים דרכה, ודבר נוסף שמישהו יקבל הודעה עליו ב‑2 בלילה.

Doconut היא ספרייה. AddDoconut() מוסיפה אותה לאוסף השירותים שלך; UseDoconut() מוסיפה אותה לצינור. היא פועלת תחת זהות התהליך שלך, רואה את ההגדרות שלך, כותבת לרשומות שלך, ומופצת על ידי מה שכבר מפיץ את היישום שלך.

התוצאה המעשית היא שהאימות נשאר במקום שלו. אתה קורא ל‑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 או tag helper?

לא, וזה מכוון. האינטגרציה היא תמיד middleware בתוספת הווידג'ט JavaScript, מה ששומר על אינטגרציה אחידה בין Razor Pages, MVC, Web Forms ו‑Blazor במקום לפצל לארבעה.

איך הוא מתנהג מאחורי מאזן עומס?

חוות רשת ופריסה מבוזרת נתמכות דרך מטמון רינדור משותף. מסמך שנפתח בצומת אחד נשאר קריא כאשר בקשות נוספות מגיעות לצומת אחר.

האם אני צריך Office מותקן על השרת?

לא. הרינדור הוא מקורי — אין אינטרופ עם Office, אין Word ללא ממשק, ואין אוטומציה של COM לטיפול.

נסה זאת עם המסמכים שלך

רשיון זמני לוקח כמה דקות לבקשה ופועל לחלוטין במחשב שלך. הקבצים החשובים הם אלו שכבר מפריעים לצופה הנוכחי שלך.