ASP.NET MVC 4 カスタム アクション フィルター
ASP.NET MVC は、アクション メソッドの呼び出し前または後にフィルター処理ロジックを実行するためのアクション フィルターを提供しています。 アクション フィルターは、コントローラーのアクション メソッドに、アクション前とアクション後の動作を追加するための宣言型の手段を提供するカスタム属性です。
このハンズオン ラボでは、MvcMusicStore ソリューションにカスタム アクション フィルター属性を作成することで、コントローラーの要求をキャッチし、サイトのアクティビティをデータベース テーブルに記録します。 独自のログ フィルターは、任意のコントローラーまたはアクションに挿入することで追加できるようになります。 最終的には、訪問者の一覧を示すログ ビューが表示されます。
このハンズオン ラボは、ASP.NET MVC に関する基本的な知識があることを前提としています。 これまでに MVC ASP.NET 使用したことがない場合は、「ASP.NET MVC 4 の基礎」ハンズオン ラボを確認することをお勧めします。
Note
すべてのサンプル コードとスニペットは、Microsoft-Web/WebCampTrainingKit リリースから入手できる Web Camps トレーニング キットに含まれています。 このラボに固有のプロジェクトは、「ASP.NET MVC 4 カスタム アクション フィルター」で入手できます。
目標
このハンズオン ラボでは、次の手順について学習します:
- フィルター機能を拡張するためのカスタム アクション フィルター属性を作成する
- 特定のレベルに挿入することでカスタム フィルター属性を適用する
- カスタム アクション フィルターをグローバルに登録する
前提条件
このラボを完了するには、次の項目が必要です:
- Microsoft Visual Studio Express 2012 for Web 以降 (インストール方法については「付録 A」を参照してください)。
段取り
コード スニペットのインストール
利便性のため、このラボで管理するコードの多くは、Visual Studio コード スニペットとして入手可能です。 コード スニペットをインストールするには、.\Source\Setup\CodeSnippets.vsi ファイルを実行します。
Visual Studio Code スニペットに慣れていない場合は、その使用方法について、このドキュメントの付録「付録 C: コード スニペットの使用」を参照してください。
演習
このハンズオン ラボは、次の演習で構成されます:
このラボの推定所要時間: 30 分。
Note
各演習には、演習を完了した後に得られる、結果のソリューションが含まれる End フォルダーが付帯しています。 このソリューションは、演習の作業についてさらにヘルプが必要な場合に、ガイドとして使用できます。
演習 1: アクションのログ記録
この演習では、ASP.NET MVC 4 フィルター プロバイダーを使用して、カスタム アクション ログ フィルターを作成する方法について説明します。 そのために、選択したコントローラー内のすべてのアクティビティを記録するログ フィルターを MusicStore サイトに適用します。
このフィルターは ActionFilterAttributeClass を拡張し、OnActionExecuting メソッドをオーバーライドして各要求をキャッチし、アクションのログ記録を実行します。 HTTP 要求、メソッドの実行、結果とパラメーターに関するコンテキスト情報は、ASP.NET MVC ActionExecutingContext クラスによって提供されるようになります。
Note
ASP.NET MVC 4 には、既定のフィルター プロバイダーも用意されていて、カスタム フィルターの作成なしで使用できます。 ASP.NET MVC 4 には、次の種類のフィルターが用意されています:
- 認可フィルター。認証の実行や要求のプロパティの検証などのアクション メソッドを実行するかどうかについて、セキュリティ上の決定を行います。
- アクション フィルター。アクション メソッドの実行をラップします。 このフィルターでは、アクション メソッドへの追加データの提供、戻り値の検査、アクション メソッドの実行の取り消しなど、追加の処理を実行できます
- 結果フィルター。ActionResult オブジェクトの実行をラップします。 このフィルターでは、HTTP 応答の変更など、結果に関する追加の処理を実行できます。
- 例外 フィルター。認可フィルターから始まり結果の実行で終わるアクション メソッドのどこかで、未処理の例外がスローされた場合に実行されます。 例外フィルターは、エラー ページのログや表示などのタスクに使用できます。
フィルター プロバイダーの詳細については、この MSDN リンクを参照してください: (https://msdn.microsoft.com/library/dd410209.aspx)。
MVC ミュージック ストア アプリケーションのログ機能について
このミュージック ストア ソリューションには、サイト ログ用の新しいデータ モデル テーブル ActionLog があります。このテーブルには次のフィールドがあります: 要求を受信したコントローラーの名前、呼び出されたアクション、クライアント IP、タイムスタンプ。
データ モデル - ActionLog テーブル
このソリューションには、アクション ログ用の ASP.NET MVC ビューが備えられています。このビューは、MvcMusicStores/Views/ActionLog にあります:
[アクション ログ] ビュー
この特定の構造では、すべての作業はコントローラーの要求を中断し、カスタム フィルター処理を使用することでログ記録を実行することに集中します。
タスク 1 - コントローラーの要求をキャッチするためのカスタム フィルターの作成
このタスクでは、ログ ロジックを含めるカスタム フィルター属性クラスを作成します。 そのために、ASP.NET MVC ActionFilterAttribute クラスを拡張して、インターフェイス IActionFilter を実装します。
Note
ActionFilterAttribute は、すべての属性フィルターの基本クラスになります。 これにより、コントローラー アクションの実行前後に特定のロジックを実行する次のメソッドを提供します:
- OnActionExecuting(ActionExecutingContext filterContext): アクション メソッドが呼び出される直前。
- OnActionExecuted(ActionExecutedContext filterContext): アクション メソッドの呼び出し後、結果の実行前 (ビューのレンダリング前)。
- OnResultExecuting(ResultExecutingContext filterContext): 結果が実行された直後 (ビューのレンダリング前)。
- OnResultExecuted(ResultExecutedContext filterContext): 結果が実行された後 (ビューのレンダリング後)。
これらのいずれかのメソッドを派生クラスにオーバーライドすることで、独自のフィルター処理コードを実行できます。
Begin ソリューションを開きます。これは、\Source\Ex01-LoggingActions\Begin フォルダーにあります。
作業の続行前に、いくつかの不足している NuGet パッケージをダウンロードする必要があります。 これを行うには、[プロジェクト] メニューをクリックし、[NuGet パッケージの管理] を選択します。
[NuGet パッケージの管理] ダイアログで、[復元] をクリックして、不足しているパッケージをダウンロードします。
最後に、[ビルド] | [ソリューションのビルド] をクリックしてソリューションをビルドします。
Note
NuGet を使用する利点の 1 つは、プロジェクト内のすべてのライブラリを発送する必要がなく、プロジェクト サイズが縮小される点です。 NuGet Power Tools では、Packages.config ファイルでパッケージのバージョンを指定することで、プロジェクトを初回実行するときに必要なすべてのライブラリをダウンロードできます。 このラボから既存のソリューションを開いた後に、これらの手順を実行する必要があるのは、このような理由によります。
詳細については、次の記事を参照してください: https://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages。
新しい C# クラスを Filters フォルダーに追加して、CustomActionFilter.cs という名前を付けます。 このフォルダーに、すべてのカスタム フィルターを格納します。
CustomActionFilter.cs を開いて、名前空間 System.Web.Mvc と MvcMusicStore.Models への参照を追加します:
(コード スニペット - ASP.NET MVC 4 カスタム アクション フィルター - Ex1-CustomActionFilterNamespaces)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcMusicStore.Models;
ActionFilterAttribute から CustomActionFilter クラスを継承して、CustomActionFilter クラスに IActionFilter インターフェイスを実装します。
//... namespace MvcMusicStore.Filters { public class CustomActionFilter : ActionFilterAttribute, IActionFilter { //... } }
CustomActionFilter クラスでメソッド OnActionExecuting をオーバーライドして、フィルターの実行をログ記録するために必要なロジックを追加します。 そのために、次の強調表示されたコードを CustomActionFilter クラスに追加します。
(コード スニペット - ASP.NET MVC 4 カスタム アクション フィルター - Ex1-LoggingActions)
public class CustomActionFilter : ActionFilterAttribute, IActionFilter { void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext) { // TODO: Add your action filter's tasks here // Log Action Filter call using (MusicStoreEntities storeDb = new MusicStoreEntities()) { ActionLog log = new ActionLog() { Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, Action = string.Concat(filterContext.ActionDescriptor.ActionName, " (Logged By: Custom Action Filter)"), IP = filterContext.HttpContext.Request.UserHostAddress, DateTime = filterContext.HttpContext.Timestamp }; storeDb.ActionLogs.Add(log); storeDb.SaveChanges(); OnActionExecuting(filterContext); } } }
Note
OnActionExecuting メソッドでは、新しい ActionLog レジスタを追加するために Entity Framework を使用しています。 これにより新しいエンティティ インスタンスを作成し、filterContext からののコンテキスト情報を入力します。
ControllerContext クラスの詳細については、msdn を参照してください。
タスク 2 - ストア コントローラー クラスへのコード インターセプターの挿入
このタスクでは、ログ記録されるすべてのコントローラー クラスとコントローラー アクションにカスタム フィルターを挿入することで追加します。 この演習の目的に合わせて、ストア コントローラー クラスがログを保持するようにします。
ActionLogFilterAttribute カスタム フィルターからのメソッド OnActionExecuting は、挿入された要素が呼び出されたときに実行されます。
また、特定のコントローラー メソッドをインターセプトすることもできます。
MvcMusicStore\Controllers にある StoreController を開いて、Filters 名前空間への参照を追加します:
using System.Linq; using System.Web.Mvc; using MvcMusicStore.Models; using MvcMusicStore.Filters;
StoreController クラスにカスタム フィルター CustomActionFilter を挿入するために、クラス宣言の前に [CustomActionFilter] 属性を追加します。
... [CustomActionFilter] public class StoreController : Controller { ... }
Note
フィルターがコントローラー クラスに挿入されると、そのアクションのすべても挿入されます。 特定のアクションのセットにのみフィルターを適用するには、それらのそれぞれに [CustomActionFilter] を挿入する必要があります:
[CustomActionFilter] public ActionResult Index() { ... } [CustomActionFilter] public ActionResult Browse(string genre) { ... }
タスク 3 - アプリケーションの実行
このタスクでは、ログ フィルターが機能していることをテストします。 アプリケーションを起動して、ストアにアクセスし、ログ記録されたアクティビティを確認します。
F5 キーを押してアプリケーションを実行します。
/ActionLog を参照して、ログ ビューの初期状態を確認します:
ページ アクティビティ前のログ トラッカーの状態
Note
既定では、メニューの既存のジャンルを取得するときに生成される 1 つの項目が常に表示されます。
わかりやすくするために、アプリケーションの実行ごとに ActionLog テーブルをクリーンアップして、各タスクの検証のログのみが表示されるようにしています。
ストア コントローラー内で実行されたすべてのアクションについての履歴ログを保存するには、Session_Start メソッド (Global.asax クラス内) から次のコードを削除する必要があります。
// Clean up Logs Table MusicStoreEntities storeDB = new MusicStoreEntities(); foreach (var log in storeDB.ActionLogs.ToList()) { storeDB.ActionLogs.Remove(log); } storeDB.SaveChanges();
メニューからいずれかのジャンルをクリックして、入手可能なアルバムの閲覧などのアクションを実行します。
/ActionLog を参照します。ログが空の場合は F5 キーを押してページを更新します。 自分の訪問が追跡されていたことを確認します:
アクティビティがログ記録されたアクション ログ
演習 2: 複数のアクション フィルターの管理
この演習では、StoreController クラスに 2 つ目のカスタム アクション フィルターを追加して、両方のフィルターが実行される特定の順序を定義します。 その後で、フィルターをグローバルに登録するために、コードを更新します。
フィルターの実行順序を定義する際に考慮が必要な異なるオプションがあります。 たとえば、Order プロパティとフィルターのスコープです:
スコープはフィルターごとに定義できます。たとえば、すべてのアクション フィルターをコントローラー スコープ内で実行して、すべての認可フィルターをグローバル スコープ内で実行することもできます。 スコープには、実行順序が定義されています。
さらに、アクション フィルターごとに、フィルターのスコープ内の実行順序を決定するために使用される Order プロパティがあります。
カスタム アクション フィルターの実行順序に関する詳細については、次の MSDN 記事を参照してください: (https://msdn.microsoft.com/library/dd381609(v=vs.98).aspx)。
タスク 1: カスタム アクション フィルターの作成
このタスクでは、新しいカスタム アクション フィルターを作成して、StoreController クラスに挿入し、フィルターの実行順序を管理する方法について説明します。
Begin ソリューションを開きます。これは、\Source\Ex02-ManagingMultipleActionFilters\Begin フォルダーにあります。 または、前の演習を完了して取得した End ソリューションを引き続き使用できます。
提供された Begin ソリューションを開いた場合は、続行する前に、不足している NuGet パッケージをダウンロードする必要があります。 これを行うには、[プロジェクト] メニューをクリックし、[NuGet パッケージの管理] を選択します。
[NuGet パッケージの管理] ダイアログで、[復元] をクリックして、不足しているパッケージをダウンロードします。
最後に、[ビルド] | [ソリューションのビルド] をクリックしてソリューションをビルドします。
Note
NuGet を使用する利点の 1 つは、プロジェクト内のすべてのライブラリを発送する必要がなく、プロジェクト サイズが縮小される点です。 NuGet Power Tools では、Packages.config ファイルでパッケージのバージョンを指定することで、プロジェクトを初回実行するときに必要なすべてのライブラリをダウンロードできます。 このラボから既存のソリューションを開いた後に、これらの手順を実行する必要があるのは、このような理由によります。
詳細については、次の記事を参照してください: https://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages。
新しい C# クラスを Filters フォルダーに追加して、MyNewCustomActionFilter.cs という名前を付けます
MyNewCustomActionFilter.cs を開いて、名前空間 System.Web.Mvc と MvcMusicStore.Models への参照を追加します:
(コード スニペット - ASP.NET MVC 4 カスタム アクション フィルター - Ex2-MyNewCustomActionFilterNamespaces)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcMusicStore.Models;
既定のクラスの宣言を次のコードに置き換えます。
(コード スニペット - ASP.NET MVC 4 カスタム アクション フィルター - Ex2-MyNewCustomActionFilterClass)
public class MyNewCustomActionFilter : ActionFilterAttribute, IActionFilter { void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext) { // TODO: Add your acction filter's tasks here // Log Action Filter Call MusicStoreEntities storeDB = new MusicStoreEntities(); ActionLog log = new ActionLog() { Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, Action = filterContext.ActionDescriptor.ActionName + " (Logged By: MyNewCustomActionFilter)", IP = filterContext.HttpContext.Request.UserHostAddress, DateTime = filterContext.HttpContext.Timestamp }; storeDB.ActionLogs.Add(log); storeDB.SaveChanges(); this.OnActionExecuting(filterContext); } }
Note
このカスタム アクション フィルターは、前の演習で作成したフィルターとほとんど同じものです。 主な違いは、ログを登録したフィルターを識別するために、この新しいクラスの名前で "Logged By" 属性が更新されていることです。
タスク 2: StoreController クラスへの新しいコード インターセプターの挿入
このタスクでは、StoreController クラスに新しいカスタム フィルターを追加して、ソリューションを実行し、両方のフィルターがどのように連携するかを確認します。
MvcMusicStore\Controllers にある StoreController クラスを開いて、次のコードに示すように新しいカスタム フィルター MyNewCustomActionFilter を StoreController クラスに追加します。
[MyNewCustomActionFilter] [CustomActionFilter] public class StoreController : Controller { ... }
この時点で、アプリケーションを実行して、これら 2 つのカスタム アクション フィルターの動作を確認します。 そのために、F5 キーを押して、アプリケーションが起動されるまで待ちます。
/ActionLog を参照して、ログ ビューの初期状態を確認します。
ページ アクティビティ前のログ トラッカーの状態
メニューからいずれかのジャンルをクリックして、入手可能なアルバムの閲覧などのアクションを実行します。
今回は、自分の訪問が StorageController に追加したカスタム アクション フィルターごとに 1 回ずつ、2 回追跡されていることを確認します。
アクティビティがログ記録されたアクション ログ
ブラウザーを閉じます。
タスク 3: フィルターの順序の管理
このタスクでは、Order プロパティを使用してフィルターの実行順序を管理する方法について説明します。
MvcMusicStore\Controllers にある StoreController クラスを開いて、両方のフィルターの Order プロパティを次に示すように指定します。
[MyNewCustomActionFilter(Order = 2)] [CustomActionFilter(Order = 1)] public class StoreController : Controller { ... }
この時点で、Order プロパティの値に応じてフィルターが実行される状態を確認します。 最も小さい Order 値のフィルター (CustomActionFilter) が最初に実行されたことがわかります。 F5 キーを押して、アプリケーションが起動されるまで待ちます。
/ActionLog を参照して、ログ ビューの初期状態を確認します。
ページ アクティビティ前のログ トラッカーの状態
メニューからいずれかのジャンルをクリックして、入手可能なアルバムの閲覧などのアクションを実行します。
今回は、自分の訪問がフィルターの Order 値の順に (CustomActionFilter のログが先に) 追跡されていることを確認します。
アクティビティがログ記録されたアクション ログ
この時点で、フィルターの順序値を更新することで、ログ記録の順序が変更される状況を確認します。 StoreController クラスで、フィルターの Order 値を次に示すように更新します。
[MyNewCustomActionFilter(Order = 1)] [CustomActionFilter(Order = 2)] public class StoreController : Controller { ... }
もう一度 F5 キーを押して、アプリケーションを実行します。
メニューからいずれかのジャンルをクリックして、入手可能なアルバムの閲覧などのアクションを実行します。
今回は、MyNewCustomActionFilter フィルターで作成されたログが最初に表示されます。
アクティビティがログ記録されたアクション ログ
タスク 4: フィルターのグローバルな登録
このタスクでは、グローバルなフィルターとして新しいフィルター (MyNewCustomActionFilter) を登録するようにソリューションを更新します。 こうすることで、それは前のタスクのように StoreController 内だけでなく、アプリケーションで実行されたアクションのすべてでトリガーされるようになります。
StoreController クラスで、[CustomActionFilter] から [MyNewCustomActionFilter] 属性と順序プロパティを削除します。 つまり、次のようになります。
[CustomActionFilter] public class StoreController : Controller { ... }
Global.asax ファイルを開いて、Application_Start メソッドを見つけます。 FilterConfig クラスの RegisterGlobalFilters メソッドを呼び出すことで、アプリケーションの起動のたびにグローバル フィルターが登録されていることに注目してください。
Global.asax でのグローバル フィルターの登録
App_Start フォルダー内で FilterConfig.cs ファイルを開きます。
using System.Web.Mvc; using MvcMusicStore.Filters; 名前空間への参照を追加します。
using System.Web.Mvc; using MvcMusicStore.Filters;
カスタム フィルターを追加する RegisterGlobalFilters メソッドを更新します。 そうするには、強調表示されたコードを追加します:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new MyNewCustomActionFilter()); }
F5 キーを押してアプリケーションを実行します。
メニューからいずれかのジャンルをクリックして、入手可能なアルバムの閲覧などのアクションを実行します。
この時点で、[MyNewCustomActionFilter] が HomeController と ActionLogController にも挿入されていることを確認します。
グローバル アクティビティがログ記録されているアクション ログ
Note
さらに、このアプリケーションは Windows Azure Web サイトにデプロイできます。手順については、「付録 B: Web 配置を使用した ASP.NET MVC 4 アプリケーションの発行」を参照してください。
まとめ
このハンズオン ラボを完了することで、カスタム アクションを実行するようにアクション フィルターを拡張する方法について学習しました。 また、ページ コントローラーにフィルターを挿入する方法も学習しました。 次の概念が使用されました:
- ASP.NET MVC ActionFilterAttribute クラスでカスタム アクション フィルターを作成する方法
- ASP.NET MVC コントローラーにフィルターを挿入する方法
- Order プロパティを使用してフィルター順序を管理する方法
- フィルターをグローバルに登録する方法
付録 A: Visual Studio Express 2012 for Web のインストール
Microsoft Web Platform Installer を使用して、Microsoft Visual Studio Express 2012 for Web または別の "Express" バージョンをインストールできます。 次の手順では、Microsoft Web Platform Installer を使用して Visual studio Express 2012 for Web をインストールするために必要な手順について説明します。
https://go.microsoft.com/?linkid=9810169 にアクセスします。 または、Web Platform Installer を既にインストールしている場合、それを開き、製品 "Visual Studio Express 2012 for Web with Windows Azure SDK" を検索できます。
[今すぐインストール] をクリックします。 Web Platform Installer がない場合は、最初にダウンロードしてインストールするようにリダイレクトされます。
Web Platform Installer が開いたら、[インストール] をクリックしてセットアップを開始します。
Visual Studio Express をインストールする
すべての製品のライセンスと使用条件を読み、[同意する] をクリックして続行します。
ライセンス条項に同意する
ダウンロードとインストールのプロセスが完了するまで待機します。
インストールの進行状況
インストールが完了したら、[完了] をクリックします。
インストールの完了
[終了] をクリックして Web Platform Installer を閉じます。
Visual Studio Express for Web を開くには、[スタート] 画面に移動し、「VS Express」と記入して、[VS Express for Web] タイルをクリックします。
VS Express for Web タイル
付録 B: Web 配置を使用した ASP.NET MVC 4 アプリケーションの発行
この付録では、Windows Azure 管理ポータルから新しい Web サイトを作成し、ラボに従って取得したアプリケーションを発行する方法について説明します。これは、Windows Azure によって提供される Web 配置発行機能を利用することです。
タスク 1 - Windows Azure Portal から新しい Web サイトを作成する
Windows Azure 管理ポータルに移動し、サブスクリプションに関連付けられている Microsoft 資格情報を使用してサインインします。
Note
Windows Azure では、10 ASP.NET Web サイトを無料でホストし、トラフィックの増加に合わせてスケーリングできます。 こちらからサインアップできます。
Windows Azure 管理ポータルにログオン
コマンド バーの [新規] をクリックします。
新しい Web サイトの作成
[コンピューティング] | [Web サイト] をクリックします。 続いて、[簡易作成] オプションを選択します。 新しい Web サイト用の使用可能な URL を指定し、[Web サイトの作成] をクリックします。
Note
Windows Azure Web サイトは、制御および管理できるクラウドで実行されている Web アプリケーションのホストです。 [簡易作成] オプションを使用すると、完成した Web アプリケーションをポータルの外部から Windows Azure Web サイトにデプロイできます。 データベースをセットアップするための手順は含まれません。
簡易作成を使用した新しい Web サイトの作成
新しい Web サイトが作成されるまで待機します。
Web サイトが作成されたら、URL 列の下にあるリンクをクリックします。 新しい Web サイトが動作していることを確認します。
新しい Web サイトの参照
実行中の Web サイト
ポータルに戻って [名前] 列の下にある Web サイトの名前をクリックして、管理ページを表示します。
Web サイト管理ページを開く
[ダッシュボード] ページの [概要] セクションで、[発行プロファイルのダウンロード] リンクをクリックします。
Note
発行プロファイル には、有効になっている各発行方法について、Windows Azure Web サイトに Web アプリケーションを発行するために必要なすべての情報が含まれています。 発行プロファイルには、発行メソッドが有効化される各エンドポイントに接続して認証するために必要な URL、ユーザーの資格情報、およびデータベース文字列が含まれています。 Microsoft WebMatrix 2、Microsoft Visual Studio Express for Web 、および Microsoft Visual Studio 2012 では、Windows Azure Web サイトに Web アプリケーションを発行するためのこれらのプログラムの構成を自動化するための発行プロファイルの読み取りがサポートされています。
Web サイト発行プロファイルのダウンロード
発行プロファイル ファイルを既知の場所にダウンロードします。 この演習では、このファイルを使用して、Visual Studio から Windows Azure Web サイトに Web アプリケーションを発行する方法について説明します。
発行プロファイル ファイルの保存
タスク 2 - データベース サーバーの構成
アプリケーションで SQL Server データベースを使用する場合は、SQL Database サーバーを作成する必要があります。 SQL Server を使用しないシンプルなアプリケーションをデプロイする場合は、このタスクをスキップできます。
アプリケーション データベースを格納するための SQL Database サーバーが必要です。 [SQL データベース] | [サーバー] | [サーバーのダッシュボード] で Windows Azure 管理ポータルのサブスクリプションから SQL データベース サーバーを表示することができます。 サーバーを作成していない場合は、コマンド バーの [追加] ボタンを使用して作成できます。 次のタスクで使用するため、サーバー名と URL、管理者ログイン名、パスワードを書き留めます。 データベースは後の段階で作成されるため、まだ作成しないでください。
SQL Database サーバー ダッシュボード
次のタスクでは、Visual Studio からのデータベース接続をテストします。そのため、ローカル IP アドレスをサーバーの許可された IP アドレスの一覧に含める必要があります。 これを行うには、[構成] をクリックし、[現在のクライアント IP アドレス] から IP アドレスを選択し、[開始 IP アドレス] テキスト ボックスと [終了 IP アドレス] テキスト ボックスに貼り付けて、 ボタンをクリックします。
クライアント IP アドレスの追加
クライアント IP アドレスが許可された IP アドレスの一覧に追加されたら、[保存] をクリックして変更を確認します。
変更を確認
タスク 3 - Web 配置を使用した ASP.NET MVC 4 アプリケーションの発行
ASP.NET MVC 4 ソリューションに戻ります。 ソリューション エクスプローラーで、プロジェクトを右クリックして [発行] を選択します。
Web サイトの発行
最初のタスクで保存した発行プロファイルをインポートします。
公開プロファイルのインポート
[接続の検証] をクリックします。 検証が完了したら、[次へ] をクリックします。
Note
[接続の検証] ボタンの横に緑色のチェックマークが表示されたら、検証は完了しています。
接続の検証
[設定] ページの [データベース] セクションで、データベース接続のテキスト ボックス (DefaultConnection) の横にあるボタンをクリックします。
Web 配置の構成
次のようにデータベース接続を構成します:
[サーバー名] に、tcp: プレフィックスを使用して SQL Database サーバーの URL を入力します。
[ユーザー名] に、サーバー管理者のログイン名を入力します。
[パスワード] に、サーバー管理者のログイン パスワードを入力します。
新しいデータベース名を入力します。
同期先接続文字列の構成
次に、 [OK] をクリックします データベースの作成を求められたら、[はい] をクリックします。
データベースの作成
Windows Azure の SQL Database への接続に使用する接続文字列は、[既定の接続] ボックス内に表示されます。 続けて、 [次へ] をクリックします。
SQL Database を指す接続文字列
[プレビュー] ページで [発行] をクリックします。
Web アプリケーションの発行
発行プロセスが完了すると、既定のブラウザーで発行された Web サイトが開きます。
付録 C: コード スニペットの使用
コード スニペットを使用すると、必要なすべてのコードをすぐに入手できます。 ラボ ドキュメントでは、次の図に示すように、使用できるタイミングが正確に示されています。
Visual Studio コード スニペットを使用してプロジェクトにコードを挿入する
キーボードを使用してコード スニペットを追加するには (C# のみ)
- コードを挿入する場所にカーソルを置きます。
- スニペット名の入力を開始します (スペースやハイフンは使用しない)。
- IntelliSense に対応するスニペットの名前が表示されるのを確認します。
- 適切なスニペットを選択します (または、スニペットの名前が完全に選択されるまで入力を続けます)。
- Tab キーを 2 回押して、カーソル位置にスニペットを挿入します。
スニペット名の入力を開始する
Tab キーを押して強調表示されたスニペットを選択する
Tab キーをもう一度押すと、スニペットが展開される
マウスを使用してコード スニペット追加するには (C#、Visual Basic、XML) 1. コード スニペットを挿入する場所を右クリックします。
- [スニペットの挿入] に続いて [マイ コード スニペット] を選択します。
- 関連するスニペットをクリックして、一覧から選択します。
コード スニペットを挿入する場所を右クリックし、[スニペットの挿入] を選択する
関連するスニペットをクリックして、一覧から選択する