#はじめに
こういうテーブルから
BookId | Title | Author |
---|---|---|
1 | たったひとつの冴えたやり方 | ジェイムズ・ティプトリー・ジュニア |
2 | アンドロイドは電気羊の夢を見るか? | フィリップ・K・ディック |
3 | 夏への扉 | ロバート・A. ハインライン |
4 | 幼年期の終り | アーサー C クラーク |
5 | われはロボット | アイザック・アシモフ |
こういう JSON を返す API を作る。
[
{
"bookId": 1,
"title": "たったひとつの冴えたやりかた",
"author": "ジェイムズ・ティプトリー・ジュニア"
},
{
"bookId": 2,
"title": "アンドロイドは電気羊の夢を見るか?",
"author": "フィリップ・K・ディック"
},
{
"bookId": 3,
"title": "夏への扉",
"author": "ロバート・A. ハインライン"
},
{
"bookId": 4,
"title": "幼年期の終り",
"author": "アーサー C クラーク"
},
{
"bookId": 5,
"title": "われはロボット",
"author": "アイザック・アシモフ"
}
]
環境
- Visual Studio 2019
- .NET Core 2.2
プロジェクト作成
コーディング
まずはエンティティクラスを作成する。プロジェクト直下に Entities
フォルダーを追加。Entities
フォルダーに Book
クラスを追加。
Entities/Book.cs
namespace SimpleWebApi.Entities
{
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public string Author { get; set; }
}
}
次にエンティティクラスとテーブルをマッピングするためのコンテキストクラスを作成する。プロジェクト直下に Data
フォルダーを追加。Data
フォルダーに DbContext
クラスを継承した BookContext
クラスを追加。
Data/BookContext.cs
using Microsoft.EntityFrameworkCore;
using SimpleWebApi.Entities;
namespace SimpleWebApi.Data
{
public class BookContext : DbContext
{
public BookContext(DbContextOptions options) : base(options)
{
}
public DbSet<Book> Books { get; set; }
}
}
Controllers
フォルダーに BooksController
コントローラーを追加。
コントローラーにコンストラクターと List
メソッドを追加。
Controllers/BooksController.cs
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using SimpleWebApi.Data;
using SimpleWebApi.Entities;
namespace SimpleWebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class BooksController : ControllerBase
{
private readonly BookContext context;
public BooksController(BookContext context)
{
this.context = context;
}
[HttpGet]
public ActionResult<IEnumerable<Book>> List()
{
var books = context.Books;
return books;
}
}
}
Startup.cs にコンテクストクラスをサービスとして登録する。
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using SimpleWebApi.Data;
namespace SimpleWebApi
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<BookContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); //追加
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
}
appsettings.json に接続文字列を追加。
appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=SimpleWebApiDb;Trusted_Connection=True;"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
データ準備
パッケージマネージャーコンソールで以下のコマンドを実行。(Migrations
フォルダーと Migration クラスが作成される)
> Add-Migration Initial
続けて以下のコマンドを実行。(データベースとテーブルが作成される)
> Update-Database
SQL Server でレコード追加クエリ実行。
INSERT INTO Books (Title, Author) VALUES (N'たったひとつの冴えたやりかた',N'ジェイムズ・ティプトリー・ジュニア');
INSERT INTO Books (Title, Author) VALUES (N'アンドロイドは電気羊の夢を見るか?',N'フィリップ・K・ディック');
INSERT INTO Books (Title, Author) VALUES (N'夏への扉',N'ロバート・A. ハインライン');
INSERT INTO Books (Title, Author) VALUES (N'幼年期の終り',N'アーサー C クラーク');
INSERT INTO Books (Title, Author) VALUES (N'われはロボット',N'アイザック・アシモフ');
動作確認
デバッグ実行して /api/books にアクセス。
[
{
"bookId": 1,
"title": "たったひとつの冴えたやりかた",
"author": "ジェイムズ・ティプトリー・ジュニア"
},
{
"bookId": 2,
"title": "アンドロイドは電気羊の夢を見るか?",
"author": "フィリップ・K・ディック"
},
{
"bookId": 3,
"title": "夏への扉",
"author": "ロバート・A. ハインライン"
},
{
"bookId": 4,
"title": "幼年期の終り",
"author": "アーサー C クラーク"
},
{
"bookId": 5,
"title": "われはロボット",
"author": "アイザック・アシモフ"
}
]
ソースコード