---
title: "MVCルーティングを活用してください"
slug: "use-mvc-routing"
abstract: "ルーティングはMVCの中心的な概念です。"
---
# MVCルーティングを活用してください

Sitecoreはデフォルトのルーティング機構ですが、MVCベースのソリューションではカスタムルートを追加できます。 [このMSDN記事では](https://msdn.microsoft.com/en-us/library/cc668201.aspx)APS.NET MVCルーティング全般について説明しています。このトピックは、Sitecore MVCソリューションでカスタムルートを作成する際に考慮すべきことのみを説明しています。説明はVisual Studio 2015とSitecore Rocksの使用に基づいています。以前のバージョンのVisual Studioでは、いくつかの詳細が異なります。

MVCルートを追加する最も安全で推奨される方法は、Initializeパイプラインにプロセッサを追加し、ルートを登録し、RouteConfigクラスでルートテーブルを実装することです。これにより、Sitecoreルートを誤って壊すのを防ぎます。

カスタムルートを使用するには、以下の条件が必要です:

-   [カスタムルートを定義してください](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/use-mvc-routing.html#UUID-70464efb-cf5b-37c4-c7f9-e6c45e08f3e1_id__Define_a_custom "Define a custom route")
-   [カスタムルートを登録してください](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/use-mvc-routing.html#UUID-70464efb-cf5b-37c4-c7f9-e6c45e08f3e1_id__Register_the_custom "Register the custom route")

## カスタムルートを定義してください

カスタムルートを定義するには:

1.  RouteConfigクラスの実装におけるデフォルトルートを、解のApp\_StartフォルダにあるVisual Studioが作成したRouteConfig.csファイルにコメントを書き出します。Visual Studioのコードは以下の通りです:
    
    {
     public static void RegisterRoutes(RouteCollection routes)
     {
     routes.IgnoreRoute("{resource}.axd/{\*pathInfo}");
     routes.MapRoute(
     name: "Default",
     url: "{controller}/{action}/{id}",
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
     );
     }
    }
    
2.  この例に似たルートを追加してください:
    
    routes.MapRoute("product", "product/{\*pathInfo}", new { scItemPath = "/{\*pathInfo}"});
    
    このルートにより、コンテンツツリーの根にある項目は /name of productとしてもアクセス可能です。 /product/name of product.
    
    Sitecoreはルートを定義する際に使用できるカスタム値を提供します:
    
    -   scLanguage – リクエストのコンテキスト言語です。
    -   scItemPath – ルートURLに関わらず、この要素の値を用いてアイテムが解決されます.
    -   scKeysToIgnore – Sitecoreに無視してほしいルートURLのキーです。もしルート内に存在した場合、URLからアイテムを解決しようとする前に削除されます。
    
    このようにルートごとにコントローラーを指定することができます:
    
    routes.MapRoute("product", "product/{\*pathInfo}", new { scItemPath = "/{\*pathInfo}", controller="Product});
    

カスタムルートでコントローラを指定していない場合、デフォルトのSitecoreコントローラがリクエストを処理します。同様に、アクションが指定されていない場合はデフォルトのアクション 'Index’ が使われます。

InitializeパイプラインのSitecore.Mvc.Pipelines.Loader.InitializeRoutesプロセッサは、すべてのルートにセッションが存在する必要があります。したがって、Sitecore.Mvc.Pipelines.Loader.InitializeRoutesプロセッサの前にカスタムルート登録プロセッサを追加すれば、コントローラーでセッションが利用可能になります。

Sitecore.Mvc.Pipelines.Loader.InitializeRoutesprocessor後に初期化されたプロセッサでルートを登録すると、そのセッションは利用できず、コントローラーリクエストも追跡されません。これは、追跡不要のカスタムルート、例えばWeb APIルートに有用です。

> !注Sitecoreは*httpRequestBegin*パイプラインを実行し、Sitecoreコンテキストを設定してからリクエストを転送しますMVC。しかし、Sitecore*httpRequestBegin*は、Sitecore.configファイルの*FilterUrlExtensions*プロセッサのパラメータにルートの終点が拡張子として記載されている場合のみ実行されます。
> 
> ASPX、ASHX、ASMX\\\*\\\*
> 
> (デフォルト設定はSitecoreバージョンによって多少異なります。)設定ファイルをパッチで修正し、例えば.txtを許可される拡張子として追加できます:
> 
> ASPX、ASHX、ASMX、TXT

## カスタムルートを登録してください

カスタムルートを登録するには、プロセッサを作成し、Initializeパイプラインに追加します:

1.  解決策の中で「パイプライン」というフォルダを作成してください。
    
2.  フォルダを右クリックして「 **追加、新しいアイテム**...」を選択してください。
    
3.  「 **新しいアイテムを追加 - mvc** 」ダイアログで、「 **Sitecore**」「 **Pipelines**」「 **Loader Processor**」をクリックしてください。
    
    ![Add new item](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/97475578AC4447B0B932D921A59620E4.png)
    
4.  Visual Studioは以下の内容をファイルに追加します:
    
    namespace mvc.Pipelines{
     using Sitecore.Diagnostics;
     using Sitecore.Pipelines;
     // TODO: \\App\_Config\\include\\LoadRoutes.config created automatically when creating LoadRoutes class.
     public class LoadRoutes
     {
     public void Process(PipelineArgs args)
     {
     Log.Info("Sitecore is starting", this);
     }
     }
    }
    
5.  ファイルのProcessメソッドでは、作成したルートを登録するコードに置き換えます:
    
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    
    Sitecore Rocksは自動的にパッチ構成ファイルを作成し、プロセッサをInitializeパイプラインに追加します:
    
    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
     <sitecore>
     <pipelines>
     <initialize>
     <processor type="mvc.Pipelines.LoadRoutes,mvc" patch:after="processor@type='Sitecore.Pipelines.Loader.EnsureAnonymousUsers, Sitecore.Kernel'" />
     </initialize>
     </pipelines>
     </sitecore>
    </configuration>