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

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

ASP.NET

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

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

ASP.NET Web APIでデータ蓄積の5回目です。前回まででMVC個別に注目してASP.NET Web APIの開発方法を確認しました。今回からやっとASP.NET APIテンプレートを元にデータ蓄積の処理を構築してみます。前回も書きましたが、最初からテンプレートを使うと何をどうしていいか分かりずらい場合があると思ったからです。その前段階として前回までの内容を書きました。今回はテンプレートにモデルとコントローラを追加するあたりまで書きます。

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

プロジェクトの作成
それでは、まずプロジェクトの作成からです。
Visual Studio(ここでは Visual Studio Commnunity 2013です。) でプロジェクトを作成します。
[ファイル] -> [新規作成] -> [プロジェクト] の順にクリックします。以下のスクリーンショットのようにここではテンプレートのVisual C#で、WebからASP.NET Webアプリケーションを選択します。任意のプロジェクト名を入力してOKで進みます。
0003

次にここでWeb APIのテンプレートを選択するのですが、その前に認証の変更で「認証なし」に変更します。もちろん認証も重要なテーマですが、ここでは「データ蓄積処理」をテーマにするために「認証なし」に変更します。
0005

0006

これで改めてWeb APIのテンプレートの選択してプロジェクトを生成します。
0007

テンプレートの動作確認
まず、以下のようなプロジェクトのフォルダ、ファイル構成になっていると思います。もし、IdentityやUser等に関するフォルダやファイルが生成されている場合は、認証が有効になっていると思いますので再度作成した方がいいと思います。
0009

生成されたプロジェクトを何もしないでビルドします。問題なくビルド出来ると思いますのでそのままデバッグなしで開始します。以下のような画面になると思います。
0008

今回の場合は、ASP.NET MVCのフォルダやファイルも生成されているのでこのような表示になります。
今回は使いませんが、このデフォルトは以下のファイルで設定されています。
App_Startフォルダ → RouteConfig.cs
上記ファイルでASP.NET MVCフレームワークのController(System.Web.Mvc.Controllerクラス)であるHomeControllerがデフォルトに設定されているので、Controllersフォルダ配下のHomeController.csがアプリケーション起動時に呼び出されます。

Web APIのルーティンは以下のファイルで設定されています。
App_Startフォルダ → WebApiConfig.cs
こちらが本題ですが、上記ファイルで、”api/{controller}/{id}”のルーティングが設定されています。これは、ASP.NET Web APIのController(System.Web.Http.ApiControllerクラス)のルーティングです。

生成されたテンプレートには、このWeb APIのコントローラで、Controllersフォルダ配下にValuesController.csがあるのでこれをURLを指定して呼び出してみます。起動した状態で以下のように(※例です。ポート番号は各自違うと思います。)URLを指定します。
http://localhost:62205/values

そうすると、以下のようなJSONのレスポンスが返ってきました。これは、Controllersフォルダ配下のValuesController.csのGet()メソッドの処理です。

["value1","value2"]

以上を整理すると、今回のプロジェクトの構成と使い方は以下のように考えればいいでしょうか。
・ASP.NETのMVCとWeb APIのテンプレートが使える。
・ASP.NETのMVCとWeb APIのルーティングはそれぞれ別に設定されている。
・ASP.NETのMVCとWeb APIではコントローラは別クラスからの継承である。
・コントローラはとりあえず全てControllersフォルダ配下に実装していく。
・モデルはModelsフォルダに実装していく。
・Viewsフォルダは基本的には、ASP.NETのMVCのViewになる。
・JQueryは最初から組み込まれているので使える。

以上を踏まえて、ファイルを追加していきます。

モデルファイルの追加
Modelsフォルダの配下に今回のモデルを追加します。Modelsフォルダの右クリックから追加していきます。
WS000012

ASP.NET Entity Data Modelを選択します。
0010

空のCode Firstモデルを選択します。
0011

これで確かに空のCode Firstモデルが生成されました。これに以下の回で作成したモデルを組み込みます。
ASP.NET Web APIでデータ蓄積(その2)ASP.NET コードファーストでのモデル構築

多少クラス名が違いますが、以下のようになりました。生成されたコメントはそのままにしてあります。実際には命名規約やアノテーションを考慮してコードファーストのモデルを記述しますが、ここではとりあえずということで以下のようなクラスにしました。Idというプロパティは自動的に主キーになるので少なくとも主キーは管理出来ます。

namespace ASPNETWebApiTemperature.Models
{
    using System;
    using System.Data.Entity;
    using System.Linq;

    using System.ComponentModel.DataAnnotations;

    public class Temperature : DbContext
    {
        // コンテキストは、アプリケーションの構成ファイル (App.config または Web.config) から 'Temperature' 
        // 接続文字列を使用するように構成されています。既定では、この接続文字列は LocalDb インスタンス上
        // の 'ASPNETWebApiTemperature.Models.Temperature' データベースを対象としています。 
        // 
        // 別のデータベースとデータベース プロバイダーまたはそのいずれかを対象とする場合は、
        // アプリケーション構成ファイルで 'Temperature' 接続文字列を変更してください。
        public Temperature()
            : base("name=Temperature")
        {
        }

        // モデルに含めるエンティティ型ごとに DbSet を追加します。Code First モデルの構成および使用の
        // 詳細については、http://go.microsoft.com/fwlink/?LinkId=390109 を参照してください。

        // public virtual DbSet<MyEntity> MyEntities { get; set; }
        public virtual DbSet<SensorDevice> SensorDevices { get; set; }
        public virtual DbSet<TemperatureData> TemperatureDatas { get; set; }
    }

    //public class MyEntity
    //{
    //    public int Id { get; set; }
    //    public string Name { get; set; }
    //}

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

        [Required]
        public int DeviceId { get; set; }

        [Required]
        [MaxLength(20), MinLength(5)]
        public string DeviceName { get; set; }

        [Required]
        [MaxLength(20), MinLength(5)]
        public string OwnerName { get; set; }
    }

    /// <summary>
    /// 温度データ
    /// </summary>
    public class TemperatureData
    {
        public int Id { get; set; }

        [Required]
        public int DeviceId { get; set; }

        [Required]
        public double TemperatureValue { get; set; }

        [Required]
        public DateTime CreatedDateTime { get; set; }
    }
}

コントローラの追加
動作確認は後にして次は、Web APIのコントローラを追加します。Controllerフォルダの右クリックから追加していきます。
WS000013

ここでは自動生成を使ってみるということで、Entity Frameworkを使用したアクションがあるWeb API2 コントローラを選択します。
0012

モデルとデータコンテキストのクラスを以下のように選択します。温度データ蓄積という処理をするためにこのコントローラを生成します。
0014

これで、TemperatureDatasController.csが生成されました。以下の回で書いたようなコントローラの処理が自動で生成されました。
ASP.NET Web APIでデータ蓄積(その3)ASP.NET ApiControllerクラス
ASP.NET Web APIでデータ蓄積(その4)ASP.NET ApiControllerクラスとView

ここで実際のデータ蓄積処理となるPostのメソッドに温度データにサーバサイドで時刻を設定することにします。

   // POST: api/TemperatureDatas
    [ResponseType(typeof(TemperatureData))]
    public IHttpActionResult PostTemperatureData(TemperatureData temperatureData)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        //現在時刻を設定する
        temperatureData.CreatedDateTime = DateTime.Now;

        db.TemperatureDatas.Add(temperatureData);
        db.SaveChanges();

        return CreatedAtRoute("DefaultApi", new { id = temperatureData.Id }, temperatureData);
    }

以上で温度データをPostして追加出来るかというところですが、長くなるので続きは次回に書きます。

今回のシリーズの一覧です。
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サイトを公開してみる(その2)ASP.NETサイトの作成

Microsoft AzureでASP.NETサイトを公開してみるの2回目です。今回は、前回インストールした Visual Studio Express 2013 for Web を使ってローカル環境 …

no image

ASP.NETユーザ管理(その2)WebFormsでのASP.NET Identity

ASP.NETユーザ管理の2回目です。前回は、主にASP.NET Identityとはといった概要的な内容について書きました。今回から実際に動作させながら確認します。 WebFormsのテンプレートを …

no image

ASP.NETユーザ管理(その1)identityフレームワーク

今現在で最新のVisual Studio 2013で利用可能なASP.NETでのユーザ認証とユーザ管理のフレームワークを使ってみました。そのユーザ管理のフレームワークは、ASP.NET Identit …

ASP.NET Web APIでデータ蓄積(その7)Raspbery Piからの温度データ蓄積

ASP.NET Web APIでデータ蓄積の7回目です。前回までで少なくとも温度データが登録出来るASP.NET Web APIが出来ました。今回はRaspbery Piに実際に温度センサを接続して温 …

no image

ASP.NETユーザ管理(その8) 2要素認証

ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の8回目です。前回は、ユーザアカウントロックを使ってみました。今回は2要素認証です。2要素認証とは例えば重要な処理の際に「セキ …