ASP.NET Core レンダリング エンジン

Version: 20.x
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Sitecore レンダリング エンジンは、Sitecore レイアウト サービスを使用して、Sitecore インスタンスから取得したコンテンツをレンダリングします。アプリケーションでレンダリング エンジンを使用するにはいくつかの設定が必要です。この設定のほとんどは、Startup クラスで実行されます。ASP.NET Core でのアプリケーションのスタートアップに関する Microsoft のドキュメントを参照してください。

レンダリング エンジン ライブラリは NuGet パッケージとして利用でき、Sitecore.AspNet.RenderingEngine の接頭辞を持ちます。

レンダリング エンジン サービスの登録

必要な Sitecore レンダリング エンジン サービスを依存関係挿入コンテナーに追加するには、ASP.NET Startup クラスの ConfigureServices() メソッド内にある Sitecore.AspNet.RenderingEngine.Extensions 名前空間の AddSitecoreRenderingEngine() 拡張メソッドを使用します。

メソッドは、ISitecoreRenderingEngineBuilder インスタンスを返し、次のような他の拡張メソッドを使用してレンダリング エンジンをさらに設定できるようにします。

RequestResponse
public void ConfigureServices(IServiceCollection services)
{
    var renderingEngineBuilder = services.AddSitecoreRenderingEngine();
}

AddSitecoreRenderingEngine() メソッドは、レンダリング エンジンのオプション設定を可能にする Action<RenderingEngineOptions> パラメーターを受け入れます。

RenderingEngineOptions パラメーターを使用すると、次の設定をクラス プロパティとしてエクスポーズできます。

  • ICollection<Action<HttpRequest, SitecoreLayoutRequest>> RequestMappings - 現在の HttpRequestSitecoreLayoutRequest の間のマッピング リストを指定できます。

    既定のマッピング セットは、次のとおりです。

    • 存在する場合、IRequestCultureFeature 内の RequestCulture.Culture.Name からの SitecoreLayoutRequest 上の Language

    • 存在する場合、sitecoreRoute ルート値からの SitecoreLayoutRequest 上の Path

    • sitecoreRoute ルート値が存在しない場合、HttpRequest.Path 値からの Path

    注記

    既定のマッピングは、MapSitecoreLocalizedRoute 拡張でサポートされ、MVC エンドポイント (app.UseEndpoints) を設定するときに使用できます。

    リストにさらにマッピングを追加するには、Sitecore.AspNet.RenderingEngine.Extensions 名前空間で利用できる MapToRequest() 拡張メソッドを使用します。以下は、現在の HttpRequest からの lang クエリ文字列値を、レイアウト サービスに送信する SitecoreLayoutRequest の言語値にマッピングするこのメソッドの使用例です。

    RequestResponse
    public void ConfigureServices(IServiceCollection services)
    {
        var renderingEngineBuilder = services.AddSitecoreRenderingEngine(
            options => options.MapToRequest(
                (httpRequest, sitecoreLayoutRequest) => sitecoreLayoutRequest.Language(httpRequest.Query["lang"]))
        );
    }
  • SortedList<int, ComponentRendererDescriptor> RendererRegistry - コンポーネント レンダラーのソート済みリスト。既定では、このリストは空です。

    レンダリング エンジンは、既定でいくつかのコンポーネント レンダラーを提供します。たとえば、ビュー コンポーネントと部分ビュー レンダラーがあります。

    レンダリング エンジンでは、コンポーネント レンダラーの設定に役立つ次の拡張メソッドを使用できます。

    • AddViewComponent() - Sitecore レイアウト コンポーネント名をビュー コンポーネント レンダリングにマッピングします。マッピング プロセスでは大文字と小文字が区別されません。

    • AddModelBoundView<TModel>() - 既定の Sitecore ビュー コンポーネントを使用して、Sitecore レイアウト コンポーネント名を既定 ビュー コンポーネント レンダリングにマッピングし、モデル バインドします。マッピング プロセスでは大文字と小文字が区別されません。

    • AddPartialView() - Sitecore レイアウト コンポーネント名を部分ビュー レンダリングにマッピングします。

    • AddDefaultPartialView() - 一致しない Sitecore レイアウト コンポーネントを既定の部分ビューにマッピングします。

    ビュー コンポーネント、モデル バインド ビュー、および部分ビューの使用の詳細については、ビューの種類を参照してください。

  • ComponentRendererDescriptor? DefaultRenderer - これは、Sitecore コンポーネントのレンダリングを処理するための既定のコンポーネント レンダラー記述子オブジェクトです。既定は、null です。

    AddDefaultComponentRenderer() 拡張メソッドを使用して、RenderingEngineOptionsDefaultRenderer を設定します。既定 レンダラーは、LoggingComponentRenderer で、HTML 出力を生成する代わりに、Sitecore コンポーネント コンテンツを指定されたログに書き込みます。これは、アプリケーションのテストで役に立ちます。次に例を示します。

    RequestResponse
    public void ConfigureServices(IServiceCollection services)
    {
        var renderingEngineBuilder = services.AddSitecoreRenderingEngine(options =>
              options
    
                // Map Partials
                .AddPartialView("HeaderBlock", "_HeaderBlock")
                .AddPartialView(name => name.StartsWith("sc"), "_OtherBlock")
    
                // Map View Components
                .AddModelBoundView<BoundContentBlock>("ContentBlock")
                .AddViewComponent("Styleguide-Layout", "StyleguideLayout")
                .AddViewComponent(name => name.StartsWith("sc"), "Other")
    
                // Add fallback for any other component
                .AddDefaultPartialView("_ComponentNotFound");
        );
    }

レンダリング エンジンでのエンドポイントとコントローラーの使用

コンテンツ駆動型の Sitecore サイトを作成する場合、通常 Sitecore コンテンツ ツリーは、ルーティングを所有しています。つまり、Sitecore URL はそのコンテンツ ツリーの構造によって決定されます。Sitecore URL は、すぐに使用できる次の形式のいずれかになります。

  • Language を含む場合 - /[language ISO]/path/to/the/page

  • Language を含まない場合 - /path/to/the/page

サイトが多言語である場合は、要求のローカリゼーションも設定する必要があります。MapSitecoreLocalizedRoute 拡張を使用して、Sitecore スタイルの言語埋め込みとコンテンツ パスをサポートするルートを設定できます。言語を含まないパスをサポートするには、組み込みの ASP.NET MapFallbackToControllerキャッチオールとして使用し、Sitecore コンテンツ パスを処理できます。

Sitecore リンク プロバイダーが常に言語を埋め込むように明示的に設定されていない限り、多言語サイトは通常、言語の埋め込みとコンテンツ パスの両方を処理します。

以下に、Default コントローラーの Index アクションにマッピングされた Sitecore ルートの例を示します。

RequestResponse
app.UseEndpoints(endpoints => 
{ 
  endpoints.MapSitecoreLocalizedRoute("Localized", "Index", "Default"); 
  endpoints.MapFallbackToController("Index", "Default"); 
}); 
注記

Sitecore エンドポイントの前に、Sitecore 以外のルートのエンドポイントを追加できます。

[UseSitecoreRendering] 属性 (Sitecore.AspNet.RenderingEngine.Filters 名前空間で利用可能) で Index アクションにタグ付けして、Sitecore レンダリング ミドルウェアと対応するレイアウト サービスへの要求を有効にしてください。

RequestResponse
public class DefaultController : Controller 
{ 
  [UseSitecoreRendering] 
  public IActionResult Index(Route route) 
  { 
    return View(route); 
  } 
} 
注記

この属性は、コントローラー自体にも適用できます。

何かフィードバックはありますか?

この記事を改善するための提案がある場合は、