---
title: "MVCとパイプライン"
slug: "mvc-and-pipelines"
abstract: "MVC処理に関わるパイプラインについて説明します。"
---
# MVCとパイプライン

このトピックでは、パイプラインとSitecore MVC使用するプロセッサについて説明します。

## MVC専用プロセッサ

一部の標準Sitecoreパイプラインには、Sitecore MVC専用のプロセッサがあります。以下の表がそれらを示しています:

**パイプライン**

**プロセッサー**

初期化

-   InitializeGlobalFilters – このプロセッサはMVCグローバルフィルターに以下のフックを設定します:
-   InitializeControllerFactory – このプロセッサは、MVCランタイムにカスタムコントローラ工場(IControllerFactory)をインストールし、MVCリクエスト処理やコントローラ作成の制御を強化します。
-   InitializeRoutes – デフォルトのSitecoreルートハンドラー(フォールスルー: {\*pathInfo})を設定し、既存のルートにSitecore固有のルートキーを装飾します。

HttpBeginRequest

-   TransferRoutedRequestこのプロセッサは LayoutResolver プロセッサの前に置かれます。リクエストがMVCルートテーブルのルートと一致すると、パイプラインは実行を停止し、MVCリクエストハンドラが引き継ぎます。考慮されるのはカスタムルートのみです。Sitecore落下ルート({\*pathInfo})はプロセッサに無視されます(そうでなければすべてのリクエストが一致し、MVCによって処理されます)。
-   TransferMvcLayout: このプロセッサは LayoutResolver プロセッサの後に配置されます。解決されたレイアウトファイル名の拡張子が MvcSettings.ViewExtensions 設定で指定された拡張子のいずれかと一致すると、パイプラインは実行を停止し、MVCリクエストハンドラが引き継ぎます。
-   TransferControllerRequest: このプロセッサは TransferMvcLayout プロセッサの後に配置されます。レイアウトが解決されていない場合、現在のアイテムの Controller フィールドが検査されます。値が含まれている場合、パイプラインは実行を停止し、MVCリクエストハンドラーが引き継ぎます。指定されたコントローラがアイテムのレンダリングを担当します。

## MVC専用パイプライン

以下の表は、MVCのみで使用されるすべてのSitecoreパイプラインを一覧にしています。

**パイプライン**

**概要**

リクエスト開始

これは、リクエストがメイン HttpRequest パイプラインから引き継がれた後のMVCリクエストの最初のアクションです。  
  
PageContextが作成され、現在のスレッドに割り当てられます。  
  
リクエストがフォーム投稿であれば、関連するフォームハンドラ(あれば)が実行されます。

リクエスト終了

これはMVCリクエストの最後のアクションです。このパイプラインは現在使用されていません。

CreateController(創造コントローラー)

このパイプラインは SitecoreControllerFactory が呼び出し、MVCリクエストハンドラが選択した現在のルートのコントローラを作成します。  
  
要求された項目(PageContext.Item)がコントローラを指定する場合( \_\_Controller Name フィールド内)、そのコントローラがインスタンス化され返されます。そうでなければ、デフォルトの SitecoreController のインスタンスが返されます。

アクション実行

このパイプラインはMVCコントローラーアクションが実行される前に実行されます。このパイプラインは現在使用されていません。

行動実行

このパイプラインはMVCコントローラーアクションが実行された後に実行されます。このパイプラインは現在使用されていません。

結果実行

このパイプラインはMVC結果が実行される前に実行されます。このパイプラインは現在使用されていません。

結果実行

このパイプラインはMVC結果が実行された後に実行されます。このパイプラインは現在使用されていません。

例外

このパイプラインは、MVCランタイムが未処理の例外をキャッチした後に実行されます。このパイプラインは現在使用されていません。  
  
このパイプラインにカスタムプロセッサを接続すると、そのプロセッサはプロセッサに渡されるExceptionArgsオブジェクトにExceptionContext.ExceptionHandledプロパティを設定するはずです。そうでなければ、Sitecore標準エラー処理を行います。

GetPageItem

このパイプラインは、ルート情報を使って要求されたアイテムを解決します。ルートからアイテムを解決できない場合は、 Context.Item を使用します。

ビルドページ定義

このパイプラインは、ページアイテムのRenderingsフィールドのXMLベースのレイアウト定義を用いて初期PageDefinitionを構築します。

GetPageRendering

このパイプラインは、現在のリクエストの出力を作成するためのページのルートレンダリングとして使用するレンダリングを選択します。  
  
現在、ルートレンダリングは現在のデバイス(PageContext.Device)のみに基づいて選択されています。

GetRenderer

このパイプラインは抽象的なレンダリング定義(レンダリング)をオブジェクトに変換し、その結果出力をクライアント(レンダラー)にレンダリング返すことができます。

GetModel

このパイプラインはMVCビューをレンダリングする際に使用するモデルオブジェクトを作成します。これは通常、ASP.NET MVC 3 Razorビューです。  
  
パイプラインがモデルを返さない場合、ビューは EmptyModelのインスタンスを受け取ります。.cshtmlファイルに @model 指示が含まれており、モデルを期待する場合、意味のあるエラーメッセージが発動します。

RenderPlaceholder

このパイプラインは Html.Sitecore().Placeholder 拡張メソッドの一部として呼ばれています。該当する場合はネストされたプレースホルダーも扱います。  
  
デフォルトでは、パイプラインは現在の PageDefinition で指定されたプレースホルダー名に一致するすべてのレンダリングを見つけてレンダリングします。子レンダリングは、レンダリングが明示的にレンダリングする場合のみ、通常は Html.Sitecore().Inner()を呼び出してレンダリングします。

RenderRendering

パイプラインは指定されたレンダリングをレンダリングします。このパイプラインはキャッシュを処理し、レンダリングのソースアイテムにアクセスするための IRenderingContext を設定します。これはネストレンダリングをサポートしています。