今はVB.NETに触る機会が多いので
Spring Tool SuiteでSpring Boot + JPAを試す
と同じものをASP.NET WebAPIでやってみる。

環境は以下で(せっかくVBなのでSQL Serverを使用することにした。)
・開発環境:Visual Studio 2015 for Web
・DB:SQL Server 2014 Express

まずはDBから。
SQL Server Managemennt Studioで新しいデータベース「loto」を作成。
「loto6」テーブルを追加。

CREATE TABLE [dbo].[loto6](
	[execCount] [int] NOT NULL,
	[execDate] [date] NULL,
	[num1] [smallint] NULL,
	[num2] [smallint] NULL,
	[num3] [smallint] NULL,
	[num4] [smallint] NULL,
	[num5] [smallint] NULL,
	[num6] [smallint] NULL,
	[BonusNum] [smallint] NULL,
 CONSTRAINT [loto6_pkey] PRIMARY KEY CLUSTERED 
(
	[execCount] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

データ投入

insert into loto6 values(1, convert(date, '20001005', 111), 2, 8, 10, 13, 27, 30, 39);
insert into loto6 values(2, convert(date, '20001012', 111), 1, 9, 16, 20, 21, 43, 5);
insert into loto6 values(3, convert(date, '20001019', 111), 1, 5, 15, 31, 36, 38, 13);
insert into loto6 values(4, convert(date, '20001026', 111), 16, 18, 26, 27, 34, 40, 13);
insert into loto6 values(5, convert(date, '20001102', 111), 9, 15, 21, 23, 27, 28, 43);
・・・

こんな感じに。

07-0003

 

では本題へ。
Visual Studioを起動、”新しいプロジェクト”を選択してウィザードを開く。
「ASPNET Webアプリケーション」を選択(ていうかこれしか出てこないMy環境、、)
名前は”loto6sample”とした。
07-0004

テンプレート選択
「WebAPI」を選択すると余計なものがいろいろ入ってきちゃったので
ここでは「Empty」を選択し、”Web API”をチェックしてOK。
07-0005

プロジェクトが作成された。
07-0006

 

App_Start/WebApiConfig.vbが作成されているのでのぞいてみる。

Public Module WebApiConfig
    Public Sub Register(ByVal config As HttpConfiguration)
        ' Web API configuration and services

        ' Web API routes
        config.MapHttpAttributeRoutes()

        config.Routes.MapHttpRoute(
            name:="DefaultApi",
            routeTemplate:="api/{controller}/{id}", ''' ①
            defaults:=New With {.id = RouteParameter.Optional} ''' ②
        )
    End Sub
End Module

①{controller}にクラス名に合わせた文字列(HogeControllerならHoge)を指定すれば良いみたい。
②{id}はオプション指定。

 

コードを入れる前にDB接続を定義する。
Web.configを開いて、configurationノード下にconnectionStringsを追加した。
(ここで設定したname”LotoConnectionString”を使って接続文字列設定を読み込む予定。)

  <connectionStrings>
    <add name="LotoConnectionString" connectionString="Data Source=My-PC;Initial Catalog=loto;User ID=hogege;Password=hogegegege" providerName="System.Data.SqlClient" />
  </connectionStrings>

 

ではコードを。

Modelを作成
ソリューションエクスプローラのModelsを右クリック→追加→クラスを選択。
名前はテーブル名に合わせて”Loto6″とした。
07-0007

loto6テーブルの列を、すべてPropertyとして追加。

Public Class Loto6
    Public Property ExecCount As Integer
    Public Property ExecDate As Date
    Public Property Num1 As Integer
    Public Property Num2 As Integer
    Public Property Num3 As Integer
    Public Property Num4 As Integer
    Public Property Num5 As Integer
    Public Property Num6 As Integer
    Public Property BonusNum As Integer
End Class

 

Contorollerを作成
ソリューションエクスプローラのControllersを右クリック→追加→クラスを選択。
名前は”Loto6Controller”とした。
( URLは”{hostname:port}/api/loto6″となる想定)
07-0008

このクラスに、loto6テーブルデータを全て返却するコードを入れる。
ソースは以下。
①ApiControllerを継承
②DB接続文字列

    Public Class Loto6Controller
        Inherits ApiController '①

        Private conStr As String = ConfigurationManager.ConnectionStrings("LotoConnectionString").ConnectionString '②

        Public Function GetAllLoto6s() As IEnumerable(Of Loto6)
            Dim lotoList As New List(Of Loto6)

            Using con As SqlConnection = New SqlConnection()
                con.ConnectionString = conStr
                con.Open()
                Dim command As SqlCommand = New SqlCommand("SELECT * FROM Loto6", con)
                Dim reader As SqlDataReader = command.ExecuteReader()
                command.Dispose()

                While (reader.Read())
                    Dim obj As Loto6 = New Loto6()
                    obj.ExecCount = CInt(reader("execCount"))
                    obj.ExecDate = CDate(reader("execDate"))
                    obj.Num1 = CInt(reader("num1"))
                    obj.Num2 = CInt(reader("num2"))
                    obj.Num3 = CInt(reader("num3"))
                    obj.Num4 = CInt(reader("num4"))
                    obj.Num5 = CInt(reader("num5"))
                    obj.Num6 = CInt(reader("num6"))
                    obj.BonusNum = CInt(reader("BonusNum"))
                    lotoList.Add(obj)
                End While
                reader.Close()
            End Using
            Return lotoList
        End Function
    End Class

 

さっそくデバッグ実行。
ブラウザが開いてTOP PAGEを表示しようとするが、TOP PAGEは何もしてないので以下のようになった。
07-0009

URLに「/api/loto6」を追加して実行すると、想定通り出力。めでたし。
07-0010

前回あたりに導入したAdvanced REST client でも、一応確認。
07-0011

 

■参考リンク
https://blogs.msdn.microsoft.com/chack/2012/02/24/asp-net-web-api-mvc-4-2/

https://msdn.microsoft.com/ja-jp/library/dn448365(v=vs.118).aspx