Web API の開発環境を作成する。
(参考)チュートリアル: ASP.NET Core で Web API を作成する(ASP.NET Core 5.0)
前提環境
Visual Studio2019
Windows10
開発
プロジェクト作成
プロジェクトの新規作成で「ASP.Net Core Web API」を選択。

モデル作成
プロジェクトに「Models」フォルダを作成し、クラスを作成。
namespace WebApplication2.Models { public class TodoItem { public long Id { get; set; } public string? Name { get; set; } public bool IsComplete { get; set; } } }
データベースコンテキスト作成
NuGetで「Microsoft.EntityFrameworkCore.InMemory」をインストールする。プロジェクト作成時「.Net5.0」を選択していたので、バージョン5.0.14を指定。
「Models」フォルダにクラスを追加。
using Microsoft.EntityFrameworkCore; namespace WebApplication2.Models { public class TodoContext : DbContext { public TodoContext(DbContextOptions<TodoContext> options) : base(options) { } public DbSet<TodoItem> TodoItems { get; set; } } }
データベースコンテキスト登録
Startup.cs に登録処理を追加する。(依存関係の挿入:DI)
using Microsoft.EntityFrameworkCore; // 追加 using WebApplication2.Models; // 追加 ・・・ public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddDbContext<TodoContext>(opt => opt.UseInMemoryDatabase("TodoList")); // 追加 } ・・・ app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapControllers(); // 追加 });
コントローラ作成
「Controllers」フォルダを作成し、新規スキャフォールディングの追加から、APIコントローラを作成すると、DBへCRUDするコードが自動で作成される。


下記エラーが発生したので、NuGetでそのパッケージをアンインストール→インストールしたら解消した。

自動作成されたコードがWeb API になる。
詳しい説明は以下。
ASP.NET Core を使って Web API を作成する
Http[Verb] 属性を使用する属性ルーティング
namespace WebApplication2.Controllers { [Route("api/[controller]")] [ApiController] public class TodoItemsController : ControllerBase { private readonly TodoContext _context; public TodoItemsController(TodoContext context) { _context = context; } // GET: api/TodoItems [HttpGet] public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems() { return await _context.TodoItems.ToListAsync(); } // GET: api/TodoItems/5 [HttpGet("{id}")] public async Task<ActionResult<TodoItem>> GetTodoItem(long id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } return todoItem; } // PUT: api/TodoItems/5 // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPut("{id}")] public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem) { if (id != todoItem.Id) { return BadRequest(); } _context.Entry(todoItem).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TodoItemExists(id)) { return NotFound(); } else { throw; } } return NoContent(); } // POST: api/TodoItems // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPost] public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem) { _context.TodoItems.Add(todoItem); await _context.SaveChangesAsync(); // return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem); return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem); } // DELETE: api/TodoItems/5 [HttpDelete("{id}")] public async Task<IActionResult> DeleteTodoItem(long id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } _context.TodoItems.Remove(todoItem); await _context.SaveChangesAsync(); return NoContent(); } private bool TodoItemExists(long id) { return _context.TodoItems.Any(e => e.Id == id); } } }
75行目はハードコーディングになっているので、nameof(GetTodoItem) に修正。
実行
プロジェクトを選択してデバッグ実行。コマンドプロンプトとブラウザが起動する。



「Get」メソッドは、「https://localhost:5001/api/todoitems」にアクセスすると結果が表示される。
「Post」メソッドは、PostmanやSwaggeで確認できる。

Swaggerインストール
Swaggerを入れれば動作確認がしやすくなる。
コメント