Ask Learn
Preview
Please sign in to use this experience.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
ASP.NET MVC 4 Beta では、ASP.NET Web API という新しいフレームワークが追加されました。この ASP.NET Web API (以後 Web API と記します) は、ブラウザーやモバイルデバイスを含むさまざまなクライアントに対して RESTful なサービスを提供するのに適した HTTP サービス構築用のフレームワークです。まずは以下に ASP.NET MVC 4 Beta リリース ノート の ASP.NET Web API 項目の簡約を記載します。
ASP.NET Web API を使った HTTP サービスの作成
それではここで、ASP.NET Web API を使ってシンプルな HTTP サービスを作成してみます。
1. 新しい Web API プロジェクトの作成
Visual Studio 2010 のメニュー [新しいプロジェクト] で “ASP.NET MVC 4 Web Application” を選び、プロジェクト名を入力します。今回も こちらのブログ記事 "Web API を始めてみよう" に合わせて “SuperHero2” としてプロジェクトを作成しました。
続いて表示される [New ASP.NET MVC 4 Project] ダイアログで、”Web API” を選択します。
プロジェクトが作成されると、Web API 用のコントローラー ValuesController.cs がデフォルトで生成されます。この ValuesController では、GET, POST, PUT, DELETE に対応したアクションメソッドが用意されていると共に、ApiController クラスの派生クラスとなっていることが分かります。通常の ASP.NET MVC のコントローラーでは Controller クラスからの派生クラスとなりますので、まずはここが大きく異なるところになります (下記コード参照) 。
1: namespace SuperHero2.Controllers
2: {
3: public class ValuesController : ApiController
4: {
5: // GET /api/values
6: public IEnumerable<string> Get()
7: {
8: return new string[] { "value1", "value2" };
9: }
10:
11: // GET /api/values/5
12: public string Get(int id)
13: {
14: return "value";
15: }
16:
17: // POST /api/values
18: public void Post(string value)
19: {
20: }
21:
22: // PUT /api/values/5
23: public void Put(int id, string value)
24: {
25: }
26:
27: // DELETE /api/values/5
28: public void Delete(int id)
29: {
30: }
31: }
32: }
2. モデルの追加
続いて、API を通して提供するデータを表した POCO (Plain-old CLR Object) クラスを作ります。このクラスのオブジェクトがモデルとして、Web API で JSON や XML などのフォーマットにシリアライズされクライアントサイドに提供されるデータとなります。
ソリューションエクスプローラーの Models フォルダー上で右クリックして、[追加] - [クラス] から Hero.cs を作り、下記のコードを記述します。
1: namespace SuperHero2.Models
2: {
3: public class Hero
4: {
5: public int Id { get; set; }
6: public string Name { get; set; }
7: }
8: }
3. コントローラ Get アクションの実装
ここで、デフォルトで生成された ValuesController.cs の名前をモデル名に合わせて HeroesController.cs にリネームしておきます。「ファイルの名前を変更しようとしています。このプロジェクトのコード要素 ‘ValuesController’ への参照をすべて変更しますか?」のメッセージボックスが表示されたら [はい] をクリックします。ファイル名を変更するだけで、コード内のクラス名も HeroesController に変更されます。
1: namespace SuperHero2.Controllers
2: {
3: public class HeroesController : ApiController
4: {
5: ...
6: }
7: }
続いて、HeroesController.cs に下記の参照を追加します。
1: using SuperHero2.Models;
そして、1 つ目の Get アクション メソッドを下記に書き換えます。
1: // GET /api/values
2: public IEnumerable<Hero> Get()
3: {
4: var heroes = new List<Hero>
5: {
6: new Hero {Id = 1, Name = "スーパーマン"},
7: new Hero {Id = 2, Name = "バットマン"},
8: new Hero {Id = 3, Name = "ウェブマトリクスマン"},
9: new Hero {Id = 4, Name = "チャッカマン"},
10: new Hero {Id = 5, Name = "スライムマン"}
11: };
12:
13: return heroes;
14: }
ここでは、実装サンプルをシンプルにするために、Get アクション メソッド内にデータをハードコーディングしていますが、実際はここで何かしらのデータ アクセスをおこなってモデルデータを取得することになるでしょう。
4. 実行
ひとまずは、これで Hero モデルのリストデータを取得する Web API が実装できましたので、実行してデータが取得できるか確認してみます。F5 または Ctrl + F5 で実行すると、Web API プロジェクトテンプレートで作成された ASP.NET MVC の Index ページが表示されます。
こちらのブログ記事で紹介した WCF Web API 拡張パッケージで提供されていたようなテスト用クライアントは、現状 ASP.NET Web API では使用できませんので、ここでは IE9 の F12 開発者ツール のネットワークキャプチャ機能を使って Web API からのレスポンスデータを確認します。(Fiddler などの HTTP キャプチャツールを使用してもかまいません)
IE9 で F12 キーを押して F12 開発者ツールを開き、[ネットワーク] タブを開きます。そして、[キャプチャの開始] ボタンを押して、HTTP のキャプチャを開始します。この状態で、IE9 のアドレスバーに https://localhost:XXXX/api/heroes と入力して、リクエストとレスポンスをキャプチャします(XXXX にはスタートページのポート番号を入力します)。
キャプチャ データをダブルクリックするか、選択してから [詳細ビューに移動] をクリックすると、リクエスト ヘッダーやレスポンス ヘッダーなどを確認することができます。ここで [応答本文] を見ると JSON 形式で Hero データが取得出来ていることが確認できます。
5. jQuery による JSON データの取得と表示
最後に、Index.cshtml で、api/heroes から JSON 形式でヒーロー データを取得し、ページ上に表示してみます。Index.cshtml ページを開き、<div id=”body”> 内部の要素を全て削除してから、下記のスクリプトやマークアップを記述します。
1: <!DOCTYPE html>
2: <html lang="en">
3: <head>
4: <meta charset="utf-8" />
5: <title>ASP.NET Web API</title>
6: <link href="@Url.Content("~/Content/Site.css")"
7: rel="stylesheet" type="text/css" />
8: <script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")"
9: type="text/javascript"></script>
10: <meta name="viewport" content="width=device-width" />
11:
12: <style type="text/css">
13: #heroes
14: {
15: font-family: Meiryo;
16: font-size: 1.2em;
17: }
18: </style>
19:
20: <script type="text/javascript">
21: $(function () {
22: // Send an AJAX request
23: $.getJSON("api/heroes/",
24: function (data) {
25: // On success, 'data' contains a list of products.
26: $.each(data, function (key, val) {
27: // Format the text to display.
28: var str = val.Id + ': ' + val.Name;
29: // Add a list item for the product.
30: $('<li/>', { html: str }).appendTo($('#heroes'));
31: });
32: });
33: });
34: </script>
35:
36: </head>
37: <body>
38: <header>
39: <div class="content-wrapper">
40: <div class="float-left">
41: <p class="site-title">
42: <a href="/">ASP.NET Web API</a></p>
43: </div>
44: </div>
45: </header>
46: <div id="body">
47: <ul id="heroes"></ul>
48: </div>
49: </body>
50: </html>
jQuery は、もともとプロジェクトに追加されているバージョン 1.6.2 をそのまま使用していますが、NuGet を通して最新版にアップデートしても構いません。Web API の呼び出しには、jQuery の getJSON メソッドを利用して非同期にデータを取得し、<ul id=”heroes”> の子要素として追加しています。
実行結果は下記の通りです。Web API として用意した api/heroes から取得した JSON データが Index.cshtml ページに表示されていることが確認できます。
おわりに
ASP.NET MVC 4 Beta で追加された新しいフレームワーク ASP.NET Web API の概要をご紹介しました。より詳しい情報は下記の ASP.NET オフィシャルページ (英語) をご参照いただければと思います。また随時、こちらのブログなどでも機能紹介していきたいと思います。
Getting Started with ASP.NET Web API
(赤シャツ男こと ScottGu’s Blog でも ASP.NET Web API シリーズ が始まりました!)
Please sign in to use this experience.
Sign in