1. MVCの

MVCルーティングを使用する

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

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

Sitecoreにはデフォルトのルーティング メカニズムがありますが、MVCベースのソリューションでカスタム ルートを追加できます。 このMSDNの記事 ではAPS.NET一般的なMVCルーティングについて説明します。このトピックでは、Sitecore MVCソリューションでカスタム ルートを作成する場合に考慮する必要がある事項についてのみ説明します。この説明は、Visual Studio 2015とSitecore Rocksの使用に基づいています。以前のバージョンのVisual Studioでは、特定の詳細が異なります。

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

カスタムルートを使用するには、次のことを行う必要があります。

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

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

  1. ソリューションのApp_StartフォルダにVisual Studioによって作成されたRouteConfig.csファイル内のRouteConfigクラスの実装で、既定のルートをコメント アウトします。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は、リクエストをMVCに転送する前に、httpRequestBegin パイプラインを実行してSitecoreコンテキストを設定します。ただし、Sitecoreは、ルートのエンドポイントにSitecore.configファイルのFilterUrlExtensionsAPIプロセッサのパラメーターに拡張子がリストされている場合にのみ、httpRequestBeginを実行します。

<processor type="Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions, Sitecore.Kernel">
    <param desc="Allowed extensions (comma separated)">aspx, ashx, asmx</param>
    <param desc="Blocked extensions (comma separated)">*</param>
    <param desc="Blocked extensions that stream files (comma separated)">*</param>
    <param desc="Blocked extensions that do not stream files (comma separated)"></param>
</processor>

(デフォルト設定はSitecoreのバージョンによって多少異なります)。設定ファイルにパッチを適用し、許可された拡張子として .txtなどを追加できます。

<param desc="Allowed extensions (comma separated)">aspx, ashx, asmx, txt</param>

カスタムルートを登録する

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

  1. ソリューションで、Pipelinesという名前のフォルダーを作成します。

  2. フォルダを右クリックし、Add, New Item...

  3. Add New Item - mvcダイアログで、「Sitecore」、「Pipelines」、「Loader Processor」をクリックします。

    Add new item
  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>
この記事を改善するための提案がある場合は、 お知らせください!