翻譯|使用教程|編輯:陳津勇|2019-11-05 10:26:16.323|閱讀 952 次
概述:本文介紹了將Web API添加到現(xiàn)有ASP.NET Core應(yīng)用程序的步驟。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
點(diǎn)擊下方圖片觀看視頻,然后繼續(xù)像ASP.NET Core應(yīng)用添加Web API支持。
Visual Studio 2019教程:將Web API添加到ASP.NET Core應(yīng)用程序中
打開項(xiàng)目
在Visual Studio 2019中打開ASP.NET Core應(yīng)用程序。該應(yīng)用程序應(yīng)該已經(jīng)在使用EF Core來管理模型類型,如本教程系列的步驟3中所配置。
添加一個(gè)API控制器
右鍵單擊該項(xiàng)目,然后添加一個(gè)名為Api的新文件夾。然后,右鍵單擊此文件夾,然后選擇Add > New Scaffolded Item。使用Entity Framework選擇帶有操作的API Controller。現(xiàn)在選擇一個(gè)現(xiàn)有的模型類,然后單擊Add。
查看生成的控制器
生成的代碼包括一個(gè)新的控制器類。類定義的頂部是兩個(gè)屬性。
[Route("api/[controller]")] [ApiController] public class GamesController : ControllerBase
第一個(gè)指定這個(gè)控制器中動(dòng)作的路由為api/[controller],這表示如果控制器名為GamesController,則路由為api/Games。
第二個(gè)屬性[ApiController]向類添加了一些有用的驗(yàn)證,比如確保每個(gè)action方法都包含自己的[Route]屬性。
public class GamesController : ControllerBase { private readonly AppDbContext _context; public GamesController(AppDbContext context) { _context = context; }
控制器使用現(xiàn)有的AppDbContext,并傳遞到其構(gòu)造函數(shù)中。每個(gè)操作都將使用此字段來處理應(yīng)用程序的數(shù)據(jù)。
// GET: api/Games [HttpGet] public IEnumerable<Game> GetGame() { return _context.Game; }
第一種方法是使用[HttpGet]屬性指定的簡(jiǎn)單GET請(qǐng)求。它不帶任何參數(shù),并返回?cái)?shù)據(jù)庫中所有游戲的列表。
// 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); }
下一個(gè)方法指定路由中的{id},它將被添加到/之后的路由中,因此完整的路由將類似于api/Games/5,如頂部的注釋所示。該id輸入被映射到方法上的id參數(shù)。在方法內(nèi)部,如果模型無效,則返回一個(gè)BadRequest結(jié)果。否則,EF將嘗試查找與提供的id匹配的記錄。如果找不到,將返回NotFound結(jié)果,否則將返回相應(yīng)的游戲記錄。
// 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]對(duì)API的請(qǐng)求來執(zhí)行更新。新Game記錄在請(qǐng)求的正文中提供。執(zhí)行一些驗(yàn)證和錯(cuò)誤檢查,如果一切順利,數(shù)據(jù)庫中的記錄將使用請(qǐng)求體中提供的值進(jìn)行更新。否則,將返回適當(dāng)?shù)腻e(cuò)誤響應(yīng)。
// 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); }
一個(gè)[HttpPost]請(qǐng)求用于向系統(tǒng)添加新記錄。與[HttpPut]一樣,記錄被添加到請(qǐng)求的正文中。如果有效,則EF Core將記錄添加到數(shù)據(jù)庫中,并且該操作將返回更新后的記錄(帶有數(shù)據(jù)庫生成的ID)和一個(gè)指向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 的路由來刪除記錄。如果請(qǐng)求有效,并且存在具有給定ID的記錄,那么EF Core從數(shù)據(jù)庫中將其刪除。
添加Swagger
Swagger是一個(gè)API文檔和測(cè)試工具,可以作為一組服務(wù)和中間件添加到ASP.NET Core應(yīng)用程序中。要做到這一點(diǎn),請(qǐng)先右鍵單擊該項(xiàng)目,然后選擇Manage NuGet Packages。單擊Browse,搜索Swashbuckle.AspNetCore并安裝相應(yīng)的軟件包。
安裝后,打開Startup.cs并將以下內(nèi)容添加到ConfigureServices方法的末尾:
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" }); });
同時(shí),還需要在文件的頂部添加Swashbuckle.AspNetCore.Swagger。
接下來,在UseMvc之前,在Configure方法中添加以下內(nèi)容:
// 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"); });
現(xiàn)在您應(yīng)該能夠構(gòu)建和運(yùn)行應(yīng)用程序了。
在瀏覽器中,導(dǎo)航到/swagger地址欄中的,應(yīng)該看到應(yīng)用程序的API端點(diǎn)和模型的列表。
點(diǎn)擊Games下的一個(gè)端點(diǎn),嘗試執(zhí)行它,查看不同端點(diǎn)的行為。
以上就是本節(jié)教程的全部?jī)?nèi)容。下節(jié)教程將介紹如何將應(yīng)用程序部署到Azure,歡迎繼續(xù)關(guān)注!
*想要獲得 Visual Studio 更多資源或正版授權(quán)的朋友,可以咨詢了解哦~
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: