---
title: "ASP.NETコアレンダリングエンジン"
slug: "asp-net-core-rendering-engine"
abstract: "Sitecoreレンダリングエンジンサービスおよびミドルウェア登録手順の概要。"
---
# ASP.NETコアレンダリングエンジン

> !重要以前にアプリを統合していた場合、それは旧版のASP.NETコアレンダリングSDK(バージョン22以前)を使用しています。このSDKは更新を受け取っていないため、[最新のバージョンへのアップグレード](https://doc.sitecore.com/xmc/en/developers/asp-net/latest/asp-net-core-sdk/upgrade-from-v22.html) をお勧めします。

Sitecoreレンダリングエンジンは [、Sitecoreレイアウトサービス](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/sitecore-layout-service.html "Sitecore Layout Service")を使ってSitecoreインスタンスから取得したコンテンツをレンダリングします。アプリケーションでレンダリングエンジンを使用するには、何らかの設定を行う必要があります。この設定の大部分はStartupクラスで行われます。 [アプリ起動に関するASP.NET CoreのMicrosoftドキュメント](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-3.1)を参照してください。

レンダリングエンジンライブラリはパッケージとしてNuGet利用可能で、その名前はSitecore.AspNet.RenderingEngineで始まっています。

## エンジンサービスの登録

必要なSitecore Rendering Engineサービスを依存性注入コンテナに追加するには、ASP.NET StartupクラスのConfigureServices()メソッドのSitecore.AspNet.RenderingEngine.Extensions名前空間からAddSitecoreRenderingEngine()extensionメソッドを使用します。

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

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

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

RenderingEngineOptionsパラメータにより、以下の構成がクラスプロパティとして公開されます。

-   ICollection<Action<HttpRequest, SitecoreLayoutRequest>> RequestMappings - 現在のHttpRequestとSitecoreLayoutRequest間の写像のリストを指定できます。
    
    デフォルトのマッピングセット:
    
    -   IRequestCultureFeatureのRequestCulture.Culture.Nameから、SitecoreLayoutRequestの上のLanguageが存在する場合、
    -   もし存在する場合、ルート値からもsitecoreRouteたらすPathSitecoreLayoutRequest。
    -   sitecoreRouteルート値が*存在しない場合*、HttpRequest.Path値からのPath。
    
    > !注デフォルトのマッピングはMapSitecoreLocalizedRoute拡張機能でサポートされており、MVCエンドポイントの設定時に利用可能です(app.UseEndpoints)。
    
    リストに追加マッピングを追加するには、Sitecore.AspNet.RenderingEngine.Extensions名前空間にあるMapToRequest()拡張メソッドを使用します。以下の例は、現在のHttpRequestのlangクエリ文字列の値をレイアウトサービスに送信する言語SitecoreLayoutRequestの値をマッピングするこのメソッドの使い方を示しています。
    
    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レイアウトコンポーネントをデフォルトの部分ビューにマッピングする。
    
    ビューコンポーネント、モデルバウンドビュー、部分ビューの使用については、[ビュータイプ](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/view-types.html "View types") をご覧ください。
    
-   ComponentRendererDescriptor? DefaultRenderer\- これはSitecoreコンポーネントレンダリングを処理するためのデフォルトのコンポーネントレンダラーディスクリプタオブジェクトです。デフォルトでは、これはnullです。
    
    RenderingEngineOptionsでDefaultRendererを設定するにはAddDefaultComponentRenderer()拡張メソッドを使用します。デフォルトのレンダラーは、Sitecoreコンポーネントの内容をHTML出力を生成するのではなく、指定されたログに書き込むLoggingComponentRendererです。これは例えばアプリケーションのテストに役立ちます:
    
    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.NETMapFallbackToControllerを万 *能* ツールとして使ってSitecoreコンテンツパスを処理できます。 

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

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

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

> !注Sitecore以外のルート用に追加エンドポイントをSitecoreエンドポイントより先に追加できます。

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

public class DefaultController : Controller
{
 UseSitecoreRendering
 public IActionResult Index(Route route)
 {
 return View(route);
 }
}

> !注この属性はコントローラー本体にも適用可能です。