• <menu id="w2i4a"></menu>
  • logo Visual Studio系列教程

    文檔首頁>>Visual Studio系列教程>>Visual Studio 2019教程:將Web API添加到ASP.NET Core應(yīng)用程序中

    Visual Studio 2019教程:將Web API添加到ASP.NET Core應(yīng)用程序中


    點擊下載Visual Studio正式版

    點擊下方圖片觀看視頻,然后繼續(xù)像ASP.NET Core應(yīng)用添加Web API支持。

    QQ截圖20191105100038.png

    Visual Studio 2019教程:將Web API添加到ASP.NET Core應(yīng)用程序中

    打開項目

    在Visual Studio 2019中打開ASP.NET Core應(yīng)用程序。該應(yīng)用程序應(yīng)該已經(jīng)在使用EF Core來管理模型類型,如本教程系列的步驟3中所配置。

    添加一個API控制器

    右鍵單擊該項目,然后添加一個名為Api的新文件夾。然后,右鍵單擊此文件夾,然后選擇Add > New Scaffolded Item。使用Entity Framework選擇帶有操作的API Controller?,F(xiàn)在選擇一個現(xiàn)有的模型類,然后單擊Add。

    vs2019-add-scaffold-api.png

    查看生成的控制器

    生成的代碼包括一個新的控制器類。類定義的頂部是兩個屬性。

    [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;
        }

    控制器使用現(xiàn)有的AppDbContext,并傳遞到其構(gòu)造函數(shù)中。每個操作都將使用此字段來處理應(yīng)用程序的數(shù)據(jù)。

    // GET: api/Games
    [HttpGet]
    public IEnumerable<Game> GetGame()
    {
        return _context.Game;
    }

    第一種方法是使用[HttpGet]屬性指定的簡單GET請求。它不帶任何參數(shù),并返回數(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);
    }

    下一個方法指定路由中的{id},它將被添加到/之后的路由中,因此完整的路由將類似于api/Games/5,如頂部的注釋所示。該id輸入被映射到方法上的id參數(shù)。在方法內(nèi)部,如果模型無效,則返回一個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]對API的請求來執(zhí)行更新。新Game記錄在請求的正文中提供。執(zhí)行一些驗證和錯誤檢查,如果一切順利,數(shù)據(jù)庫中的記錄將使用請求體中提供的值進行更新。否則,將返回適當?shù)腻e誤響應(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);
    }

    一個[HttpPost]請求用于向系統(tǒng)添加新記錄。與[HttpPut]一樣,記錄被添加到請求的正文中。如果有效,則EF Core將記錄添加到數(shù)據(jù)庫中,并且該操作將返回更新后的記錄(帶有數(shù)據(jù)庫生成的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從數(shù)據(jù)庫中將其刪除。

    添加Swagger

    Swagger是一個API文檔和測試工具,可以作為一組服務(wù)和中間件添加到ASP.NET Core應(yīng)用程序中。要做到這一點,請先右鍵單擊該項目,然后選擇Manage NuGet Packages。單擊Browse,搜索Swashbuckle.AspNetCore并安裝相應(yīng)的軟件包。

    vs2019-nuget-swashbuckle.png

    安裝后,打開Startup.cs并將以下內(nèi)容添加到ConfigureServices方法的末尾:

    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
    });

    同時,還需要在文件的頂部添加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īng)用程序了。

    在瀏覽器中,導航到/swagger地址欄中的,應(yīng)該看到應(yīng)用程序的API端點和模型的列表。

    vs2019-swagger-browser.png

    點擊Games下的一個端點,嘗試執(zhí)行它,查看不同端點的行為。

    以上就是本節(jié)教程的全部內(nèi)容。下節(jié)教程將介紹如何將應(yīng)用程序部署到Azure,歡迎繼續(xù)關(guān)注!



    *想要獲得 Visual Studio 更多資源或正版授權(quán)的朋友,可以咨詢【慧都客服】了解哦~

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();