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

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

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

大事な

September 2024より前にASP.NET Coreアプリを統合した場合は、従来の ASP.NET CoreレンダリングSDKバージョン22以前が使用されています。このSDKは更新プログラムを受け取らなくなったため、新しい ASP.NET Core SDKの最新バージョンにアップグレードすることをお勧めします。

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

レンダリング エンジン ライブラリはNuGetパッケージとして提供され、名前の先頭にはSitecore.AspNet.RenderingEngineが付きます。

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

必要なSitecoreレンダリング エンジン サービスを依存関係の挿入コンテナに追加するには、ASP.NET StartupクラスのConfigureServices()APIメソッドで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(存在する場合)。

    • HttpRequest.Path値からのPath(sitecoreRouteルート値がnot存在する場合)。

    メモ

    デフォルトのマッピングはMapSitecoreLocalizedRoute拡張機能でサポートされており、MVCエンドポイント (app.UseEndpoints) を設定するときに使用できます。

    リストにマッピングを追加するには、Sitecore.AspNet.RenderingEngine.Extensions名前空間で使用できるMapToRequest()拡張メソッドを使用します。次の例は、現在のHttpRequestlangクエリ文字列値をレイアウトサービスに送信される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を設定します。デフォルトのレンダラーは、Sitecoreコンポーネントのコンテンツを出力を生成する代わりに、指定したログに書き込むHTMLLoggingComponentRendererです。これは、次のようなアプリケーションのテストに役立ちます。

    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コンテンツツリーはルーティングowns 、つまり、Sitecore URLはそのコンテンツツリーの構造によって駆動されます。Sitecore URLは、以下の形式のいずれかをすぐに使用できます。

  • Language付き -/language ISO/path/to/the/page

  • Languageなし-/path/to/the/page

サイトが多言語の場合は、リクエストのローカリゼーションも構成する必要があります。その後、MapSitecoreLocalizedRoute拡張機能を使用して、Sitecoreスタイルの言語埋め込みとコンテンツ パスをサポートするルートを構成できます。言語を使用しないパスをサポートするには、組み込みのASP.NETMapFallbackToControllercatch allとして使用して、Sitecoreコンテンツ パスを処理します。 

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

DefaultコントローラーのIndexアクションにマップされたSitecoreルートの例:

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

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

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

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

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

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

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