今は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); ・・・
こんな感じに。
では本題へ。
Visual Studioを起動、”新しいプロジェクト”を選択してウィザードを開く。
「ASPNET Webアプリケーション」を選択(ていうかこれしか出てこないMy環境、、)
名前は”loto6sample”とした。
テンプレート選択
「WebAPI」を選択すると余計なものがいろいろ入ってきちゃったので
ここでは「Empty」を選択し、”Web API”をチェックしてOK。
プロジェクトが作成された。
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″とした。
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″となる想定)
このクラスに、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は何もしてないので以下のようになった。
URLに「/api/loto6」を追加して実行すると、想定通り出力。めでたし。
前回あたりに導入したAdvanced REST client でも、一応確認。
■参考リンク
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