打開項目數據庫
在Visual Studio 2019中打開ASP.NET Core應用程序。json
添加一個API控制器api
右鍵單擊該項目,而後添加一個名爲Api的新文件夾。而後,右鍵單擊此文件夾,而後選擇Add > New Scaffolded Item。使用Entity Framework選擇帶有操做的API Controller。如今選擇一個現有的模型類,而後單擊Add。瀏覽器
查看生成的控制器app
生成的代碼包括一個新的控制器類。類定義的頂部是兩個屬性。async
[Route("api/[controller]")] [ApiController] public class GamesController : ControllerBase
第二個屬性[ApiController]向類添加了一些有用的驗證,好比確保每一個action方法都包含本身的[Route]屬性。函數
public class GamesController : ControllerBase { private readonly AppDbContext _context; public GamesController(AppDbContext context) { _context = context; }
控制器使用現有的AppDbContext,並傳遞到其構造函數中。每一個操做都將使用此字段來處理應用程序的數據。工具
// GET: api/Games [HttpGet] public IEnumerable<Game> GetGame() { return _context.Game; }
第一種方法是使用[HttpGet]屬性指定的簡單GET請求。它不帶任何參數,並返回數據庫中全部遊戲的列表。點擊下載VS 2019測試
// GET: api/Games/5 [HttpGet("{id}")] public async Task<IActionResult> GetGame([FromRoute] int id) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var game = await _context.Game.FindAsync(id); if (game == null) { return NotFound(); } return Ok(game); }
下一個方法指定路由中的{id},它將被添加到/以後的路由中,所以完整的路由將相似於api/Games/5,如頂部的註釋所示。該id輸入被映射到方法上的id參數。在方法內部,若是模型無效,則返回一個BadRequest結果。不然,EF將嘗試查找與提供的id匹配的記錄。若是找不到,將返回NotFound結果,不然將返回相應的遊戲記錄。ui
// PUT: api/Games/5 [HttpPut("{id}")] public async Task<IActionResult> PutGame([FromRoute] int id, [FromBody] Game game) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != game.Id) { return BadRequest(); } _context.Entry(game).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!GameExists(id)) { return NotFound(); } else { throw; } } return NoContent(); }
接下來,使用[HttpPut]對API的請求來執行更新。新Game記錄在請求的正文中提供。執行一些驗證和錯誤檢查,若是一切順利,數據庫中的記錄將使用請求體中提供的值進行更新。不然,將返回適當的錯誤響應。
// POST: api/Games [HttpPost] public async Task<IActionResult> PostGame([FromBody] Game game) { if (!ModelState.IsValid) { return BadRequest(ModelState); } _context.Game.Add(game); await _context.SaveChangesAsync(); return CreatedAtAction("GetGame", new { id = game.Id }, game); }
一個[HttpPost]請求用於向系統添加新記錄。與[HttpPut]同樣,記錄被添加到請求的正文中。若是有效,則EF Core將記錄添加到數據庫中,而且該操做將返回更新後的記錄(帶有數據庫生成的ID)和一個指向API記錄的連接。
// DELETE: api/Games/5 [HttpDelete("{id}")] public async Task<IActionResult> DeleteGame([FromRoute] int id) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var game = await _context.Game.FindAsync(id); if (game == null) { return NotFound(); } _context.Game.Remove(game); await _context.SaveChangesAsync(); return Ok(game); }
最後,[HttpDelete]使用帶有ID 的路由來刪除記錄。若是請求有效,而且存在具備給定ID的記錄,那麼EF Core從數據庫中將其刪除。
添加Swagger
Swagger是一個API文檔和測試工具,能夠做爲一組服務和中間件添加到ASP.NET Core應用程序中。要作到這一點,請先右鍵單擊該項目,而後選擇Manage NuGet Packages。單擊Browse,搜索Swashbuckle.AspNetCore並安裝相應的軟件包。
安裝後,打開Startup.cs並將如下內容添加到ConfigureServices方法的末尾:
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" }); });
同時,還須要在文件的頂部添加Swashbuckle.AspNetCore.Swagger。
接下來,在UseMvc以前,在Configure方法中添加如下內容:
// Enable middleware to serve generated Swagger as a JSON endpoint. app.UseSwagger(); // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), // specifying the Swagger JSON endpoint. app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); });
如今您應該可以構建和運行應用程序了。
在瀏覽器中,導航到/swagger地址欄中的,應該看到應用程序的API端點和模型的列表。
點擊Games下的一個端點,嘗試執行它,查看不一樣端點的行爲。