サイトコアで管理されているサイトで通常の ASP.NET MVC コントローラーを統合する方法の覚書を記載します。といっても通常の ASP.NET MVC プロジェクトテンプレートでプロジェクトを作成したときに Globa.asax から呼び出されるルーティングの設定と同じことを行うだけです。
- Sitecore 7.2 update 1
- Visual Studio 2012
1. initilize パイプラインを使用してMVCコントローラーを統合する
サイトコアで管理されているサイトで通常の ASP.NET MVC コントローラーを統合する方法の覚書を記載します。Global.asax 内で ルートを登録している処理と同じことをするだけです。サイトコアと統合するので initilize パイプラインで実装します。
サイトコア用のプロジェクトを右クリック >> 追加 >> 新しい項目の追加 をクリックします。下図のように Sitecore > Pipelines のテンプレートの一覧から Loader Processor を選択してプロセッサーを作成します。今回は名前を RegisterRouteProcessor という名前で作成しました。
App_Config/Include フォルダーで自動的にパッチ用の config ファイルが作成されます。作成されたファイルを 下図のように Customフォルダーに移動し、 InitializeCustomRoutes.config という名前でリネームします。
あとは、次のように InitilizeCustomRoutes.config を編集します。名前空間は適宜読み替えてください。ルートの設定は InitializeRoutes の前に登録するようにします。
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> <sitecore> <pipelines> <initialize> <processor type="v72u1.Web.Fx.Pipelines.RegisterRouteProcessor,v72u1.Web" patch:before="processor[@type='Sitecore.Mvc.Pipelines.Loader.InitializeRoutes, Sitecore.Mvc']" /> </initialize> </pipelines> </sitecore> </configuration>
RegisterRouteProcessor パイプラインでは 通常の ASP.NET MVC と同じルートの設定をするだけです。
public class RegisterRouteProcessor { public void Process(PipelineArgs args) { RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes); } }
例えば ReouteConfig.cs では次のようなコードでルートの登録を行います。サンプルで作成した RouteConfigでは /cust というパスで通常のASP.NET MVCのルーティングと同じように 独自のASP.NET MVC コントローラーにルーティングされるように登録を行っています。
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute(name: "DefaultMVC", url: "cust/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); // デフォルトのルート設定はコメントアウト // デフォルトのルートを使用したい場合は Sitecore.Mvc.config の // Mvc.IllegalRoutes 変更する //routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //routes.MapRoute( // name: "Default", // url: "{controller}/{action}/{id}", // defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } //); } }
準備は完了です。例えば 次のような AccountController というサンプルの MVC コントローラーを作成して動作確認を行ってみます。
namespace v72u1.Web.Controllers { public class AccountController : Controller { // // GET: /Account/ public ViewResult Index() { return View(); } public JsonResult GetUserInfo() { // Context から値を取得できる var account = new AccountInfo { UserName = Sitecore.Context.User.Name }; return Json(account, JsonRequestBehavior.AllowGet); } } }
プロジェクトを Sitecore にデプロイして例えば /cust/Account/GetUserInfo にアクセスするとファイルをJson形式で応答が返されることを確認できます。
2.まとめ
簡単ですが説明は以上です。Sitecore 7.2 では ASP.NET MVC が統合されたWeb.config になっていますので、ルーティングの登録さえしてあげれば簡単に 通常の ASP.NET MVC のプログラムを実装することができるようになっています。
さんのコメント: さんのコメント: