翻譯|使用教程|編輯:陳津勇|2019-11-05 10:26:16.323|閱讀 960 次
概述:本文介紹了將Web API添加到現有ASP.NET Core應用程序的步驟。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
點擊下方圖片觀看視頻,然后繼續像ASP.NET Core應用添加Web API支持。
Visual Studio 2019教程:將Web API添加到ASP.NET Core應用程序中
打開項目
在Visual Studio 2019中打開ASP.NET Core應用程序。該應用程序應該已經在使用EF Core來管理模型類型,如本教程系列的步驟3中所配置。
添加一個API控制器
右鍵單擊該項目,然后添加一個名為Api的新文件夾。然后,右鍵單擊此文件夾,然后選擇Add > New Scaffolded Item。使用Entity Framework選擇帶有操作的API Controller。現在選擇一個現有的模型類,然后單擊Add。

查看生成的控制器
生成的代碼包括一個新的控制器類。類定義的頂部是兩個屬性。
[Route("api/[controller]")]
[ApiController]
public class GamesController : ControllerBase第一個指定這個控制器中動作的路由為api/[controller],這表示如果控制器名為GamesController,則路由為api/Games。
第二個屬性[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請求。它不帶任何參數,并返回數據庫中所有游戲的列表。
// 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結果,否則將返回相應的游戲記錄。
// 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下的一個端點,嘗試執行它,查看不同端點的行為。
以上就是本節教程的全部內容。下節教程將介紹如何將應用程序部署到Azure,歡迎繼續關注!
*想要獲得 Visual Studio 更多資源或正版授權的朋友,可以咨詢了解哦~
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自: