ASP.NET Core

3 つのミドルウェア呼び出し、書き換えではありません

Doconut は、ASP.NET Core の他のすべてと同様に登録されます:コンテナ内のサービスとパイプライン内のミドルウェアです。認証、ロギング、DI グラフ、デプロイストーリーを継承します。これはそれらの内部で実行されているため、横にあるだけではありません。

3
統合するためのミドルウェア呼び出し
75
標準でサポートされるファイル拡張子
2
デプロイ対象: Windows、Docker

問題

誰も予算を組まない統合コスト

ほとんどのドキュメントビューアは別個のサービスとして提供されます。つまり、第二のデプロイユニット、第二の認証情報、ドキュメントが通過するネットワークホップ、そして深夜 2 時に誰かに連絡する別の課題が生じます。

Doconut はライブラリです。AddDoconut() はサービスコレクションに追加し、UseDoconut() はパイプラインに組み込みます。プロセスのアイデンティティで実行され、設定を参照し、ロガーに書き込み、アプリケーションをデプロイするものによってデプロイされます。

実際の結果として、認可は本来あるべき場所に残ります。独自の権限チェックの後に OpenDocumentAsync() を呼び出すと、ビューアは渡されたものだけをレンダリングできます。

機能

ミドルウェアが提供するもの

Razor Pages、MVC、ミニマル API

ビューアはホスティングスタイルに縛られません。Razor ビューまたは静的ページからマウント div をレンダリングし、コントローラアクション、ページハンドラ、またはマッピングされたエンドポイントからドキュメントを開くことができます。

認証はそのまま

エンドポイントがパイプライン内にあるため、[Authorize] は従来通り機能します。統合すべき第二のアイデンティティシステムはありません。

セッションベースのドキュメントセキュリティ

ドキュメントセキュリティは ASP.NET のセッションステートに依存します。そのため UseSession() は UseDoconut() の前に登録する必要があります。ビューアが認識するユーザーはアプリケーションと同じです。

Web ファーム対応

ロードバランサー背後の複数ノードがレンダーキャッシュを共有するため、あるノードで開いたセッションは次のリクエストが別のノードに来ても機能し続けます。

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 + ミドルウェア アーキテクチャを使用します。バージョン固有の詳細が必要な場合は、各ページが用意されています。

Razor コンポーネントやタグヘルパーはありますか?

いいえ、意図的です。統合は常にミドルウェアと JavaScript ウィジェットの組み合わせで、Razor Pages、MVC、Web Forms、Blazor のすべてで同じ統合が有効になるようにしています。

ロードバランサー背後ではどのように動作しますか?

共有レンダーキャッシュにより、Web ファームおよび分散デプロイがサポートされます。あるノードで開いたドキュメントは、次のリクエストが別のノードに来ても読み取り可能です。

サーバーに Office をインストールする必要がありますか?

いいえ。レンダリングはネイティブで行われ、Office の相互運用やヘッドレス Word、COM 自動化は不要です。

自分のドキュメントで試す

一時ライセンスの取得には数分かかり、完全にご自身のマシン上で実行されます。重要なファイルは、現在のビューアで既に問題を起こしているものです。