株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

ASP.NET

ASP.NET Web APIでデータ蓄積(その3)ASP.NET ApiControllerクラス

投稿日:2015年7月24日 更新日:

ASP.NET Web APIでデータ蓄積の3回目です。前回は蓄積するデータとして温度データをイメージしてそのモデルをコードファーストで書いてみました。今回は、MVCのCでコントローラの部分です。VのViewについては次回以降に書きます。

ASP.NETでWeb APIを構築する際のコントローラは今現在で、System.Web.Http.ApiController クラスを使って実装します。このコントローラで実際のWeb APIの各URLの処理が実行されます。HTTPのGetで簡単なJSON形式のレスポンスを返すAPIを実装してみます。

早速簡単なところから始めます。今回は、System.Web.Http.ApiController の基本的な実装のみを取り上げるという方向で全くファイルがないASP.NETのプロジェクトから作成します。

今回のプロジェクト一式は以下です。(※単なるサンプルプログラムです。ご利用による不具合、不利益等について弊社は一切責任を負わないものとします。)
Visual Studio Commnunity 2013でのプロジェクト一式

Visual Studio(ここでは Visual Studio Commnunity 2013です。) でプロジェクトを作成します。
[ファイル] -> [新規作成] -> [プロジェクト] の順にクリックします。

以下のように、ASP.NET Webアプリケーションを選択して、任意のプロジェクト名を入力して次に進みます。
0002

次に、今回はわざわざEmptyを選択します。Web APIのテンプレートを使った実装方法は次回以降に書きます。
0003

これで全くファイルのないプロジェクトが出来ました。ここからSystem.Web.Http.ApiController クラスでのコントローラを実装します。

Microsoft ASP.NET Web APIを追加します。
[ツール] -> [NuGetパッケージマネージャー] -> [ソリューションのNuGetパッケージの管理]の順にクリックします。Microsoft ASP.NET Web APIを検索してインストールします。
0005

0006

0007

これでプロジェクトの参照設定にいろいろと追加されます。ここからコントローラを実装していきます。

ルーティングの設定
ルーティング、つまりコントローラのURLを設定します。これは、Global.asaxをプロジェクトに追加してそこに追加します。

プロジェクト名を右クリック -> [新規作成] -> [追加] -> [新しい項目]を選択します。
WS000010

グローバルアプリケーションクラスを選択します。ファイル名はそのままです。
0008

これで、Global.asaxが追加されました。

using System.Web;
using System.Web.Security;
using System.Web.SessionState;

using System.Web.Http; // これを追加

namespace APIController1
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            GlobalConfiguration.Configure(config =>
            {
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional });
            });
        }
       
    //以下は省略します。

これは、要するにアプリケーション起動時にルーティングの設定を行っているということです。この設定でAPIには、api/コントローラ名/パラメータ というURLでアクセス出来ます。

実際にコントローラを追加します。まずはやはり、HelloWorldContollerを追加してみます。
プロジェクト名を右クリック -> [新規作成] -> [追加] -> [新しい項目]を選択します。
WS000010

あえて何もない状態からということでクラスを選択します。ここでは、HelloWorldController.csとしました。Contollerという部分は規約なので必ず付けます。
以下のように編集します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Web.Http; //追加する

namespace APIController1
{
    /// <summary>
    /// HelloWorldController(System.Web.Http.ApiControllerから派生) 
    /// </summary>
    public class HelloWorldController : ApiController
    {
        public string Get()
        {
            return "HelloWorld";
        }
    }
}

これで、http://(ドメイン名等)/api/HelloWorld に対応するHTTP GETのAPIが実装出来たことになります。デバッグの開始で実行してみます。ここでは空の状態のプロジェクトから始めたので既定のファイルはありません。そのため起動時は以下のようなエラー表示になります。
0005

これは気にしないで、URLで api/HelloWorld を指定します。ここでは以下のように指定しました。
http://localhost:49318/api/HelloWorld

そうすると、以下のようにレスポンスがダウンロードファイルとして戻ります。画面下の部分です。
0013

これを「ファイルを開く」を選択します。そうすると、Visual Studioで開かれました。JSONというファイル(拡張子)がVisual Studioに割り当てられている状態だからと思います。

0014

以上でAPIの呼び出しが確認出来ました。しからながら単純な文字列だけなのでJSON形式を確認する意味で前回のモデルの中のセンサーデバイスを部分的に使ってみます。このモデルのリストを返すというコントローラを作成します。HelloWorldと同様にSensorDevicesController.csというファイルを追加します。

このファイルに通常はこういったことはしないですがモデルも書き込みます。さらに、Get()を作成して適当にモデルを生成して返します。以下のようになります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Web.Http; //追加する

namespace APIController1
{
    public class SensorDevicesController : ApiController
    {
        public SensorDevice[] Get()
        {
            SensorDevice[] devices = new SensorDevice[3];

            devices[0] = new SensorDevice { DeviceId = 1, DeviceName = "DevName1", OwnerName = "Yokohama Company" };
            devices[1] = new SensorDevice { DeviceId = 2, DeviceName = "DevName2", OwnerName = "Shinagawa Company" };
            devices[2] = new SensorDevice { DeviceId = 3, DeviceName = "DevName3", OwnerName = "Shibuya Company" };

            return devices;
        }
    }

    /// <summary>
    /// センサーデバイス
    /// </summary>
    public class SensorDevice
    {
        public int DeviceId { get; set; }

        public string DeviceName { get; set; }

        public string OwnerName { get; set; }
    }
}

これをHelloWorldと同様に、api/SensorDevices で呼び出します。以下の結果が返りました。

[
    { "DeviceId": 1, "DeviceName": "DevName1", "OwnerName": "Yokohama Company" },
    { "DeviceId": 2, "DeviceName": "DevName2", "OwnerName": "Shinagawa Company" },
    { "DeviceId": 3, "DeviceName": "DevName3", "OwnerName": "Shibuya Company" } 
]

次に以下のように、もう一つGet()を追加します。これでGet()でパラメータが取得出来ます。

  public SensorDevice Get(int Id)
        {
            switch (Id)
            {
                case 1:
                    return new SensorDevice { DeviceId = 1, DeviceName = "DevName1", OwnerName = "Yokohama Company" };

                case 2:
                    return new SensorDevice { DeviceId = 2, DeviceName = "DevName2", OwnerName = "Shinagawa Company" };

                case 3:
                    return new SensorDevice { DeviceId = 3, DeviceName = "DevName3", OwnerName = "Shibuya Company" };

                default:
                    break;
            }

            return null;
        }

このGet()には、api/SensorDevice/1 または、api/SensorDevices?id=1の形式でアクセスできます。

それでは、Postはどうなるのかということですが、PostはViewと一緒に次回に書きます。

今回のシリーズの一覧です。
ASP.NET Web APIでデータ蓄積(その1)ASP.NET Web APIとは
ASP.NET Web APIでデータ蓄積(その2)ASP.NET コードファーストでのモデル構築
ASP.NET Web APIでデータ蓄積(その3)ASP.NET ApiControllerクラス
ASP.NET Web APIでデータ蓄積(その4)ASP.NET ApiControllerクラスとView
ASP.NET Web APIでデータ蓄積(その5)ASP.NET Web APIテンプレートからの構築
ASP.NET Web APIでデータ蓄積(その6)ASP.NET Web APIでの動作確認
ASP.NET Web APIでデータ蓄積(その7)Raspbery Piからの温度データ蓄積

その他関連サイト
Getting Started with ASP.NET Web API 2 (C#)
Using Web API 2 with Entity Framework 6
Entity Framework Code First の規約
Entity Framework Code First のデータ注釈
Entity Framework での新しいデータベース向けの Code First

Amazon関連商品

AdSense

AdSense

-ASP.NET

執筆者:

関連記事

no image

Microsoft AzureでASP.NETサイトを公開してみる(その3)Visual Studio EEからの公開

Microsoft AzureでASP.NETサイトを公開してみるの3回目です。今回は、前回Visual Studio Express 2013 for Web で作成したプロジェクトをそのままをVi …

ASP.NET Web APIでデータ蓄積(その5)ASP.NET Web APIテンプレートからの構築

ASP.NET Web APIでデータ蓄積の5回目です。前回まででMVC個別に注目してASP.NET Web APIの開発方法を確認しました。今回からやっとASP.NET APIテンプレートを元にデー …

no image

ASP.NETユーザ管理(その4)ユーザ情報の追加

ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の4回目です。前回は、ユーザ登録時にメールを送信する方法を確認しました。今回は、WebFormsのテンプレートで、ユーザ登録時 …

no image

ASP.NETユーザ管理(その5)メンバー専用エリアと管理者ページ

ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の5回目です。前回は、ユーザ登録の項目を追加する方法を確認しました。今回はログイン済みのユーザのみが利用出来るエリアと管理者( …

ASP.NET Web APIでデータ蓄積(その1)ASP.NET Web APIとは

ASP.NET Web APIを利用してデータを蓄積する機能を実装してみたいと思います。漠然とデータ蓄積といってもいろいろなデータがあると思いますが、ここではセンサー等のデバイスから自動的に送信された …