翻譯|使用教程|編輯:陳津勇|2019-08-28 14:25:30.720|閱讀 587 次
概述:本教程介紹了使用ASP.NET Core構(gòu)建Web API的基礎(chǔ)知識。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在本教程中,您將學(xué)習(xí)如何:
創(chuàng)建一個Web API項目 | √ |
添加模型類和數(shù)據(jù)庫上下文 | √ |
添加控制器 | √ |
添加CRUD方法 | √ |
配置路由和URL路徑 | √ |
指定返回值 | √ |
使用Postman調(diào)用Web API | √ |
使用jQuery調(diào)用Web API | √ |
最后,您有一個Web API,可以管理存儲在關(guān)系數(shù)據(jù)庫中的“待辦事項”。
本教程將創(chuàng)建以下API:
下圖顯示了應(yīng)用程序的設(shè)計:
使用Visual Studio 2019創(chuàng)建Web項目
大家都知道,Visual Studio 2019具有ASP.NET和Web開發(fā)工作負(fù)載,那么如何使用VS 2019創(chuàng)建一個Web項目呢?只需以下四個步驟:
從文件菜單中,選擇新建 > 項目。
選擇ASP.NET Core Web Application模板,然后單擊Next。
將項目命名為TodoApi,然后單擊“ 創(chuàng)建”。
在“ 創(chuàng)建新的ASP.NET核心Web應(yīng)用程序”對話框中,確認(rèn)已選中.NET Core和ASP.NET Core 2.2。選擇API模板,然后單擊“ 創(chuàng)建”,不要選擇啟用Docker支持。
測試API
項目模板創(chuàng)建一個values API。從瀏覽器中調(diào)用Get方法來測試應(yīng)用程序。
按Ctrl + F5運行該應(yīng)用程序。Visual Studio啟動瀏覽器并導(dǎo)航到//localhost:
如果出現(xiàn)一個對話框,詢問您是否應(yīng)該信任IIS Express證書,請選擇“ 是”。在接下來出現(xiàn)的“ 安全警告”對話框中,選擇“ 是”。
返回以下JSON:
["value1","value2"]
添加模型類
模型是一組表示應(yīng)用程序管理的數(shù)據(jù)的類。這個應(yīng)用程序的模型是一個單獨的TodoItem類。
在解決方案資源管理器中,右鍵單擊項目。選擇添加 > 新建文件夾。將文件夾命名為Models。
右鍵單擊Models文件夾,然后選擇Add > Class。將類命名為TodoItem并選擇Add。
使用以下代碼替換模板代碼:
namespace TodoApi.Models { public class TodoItem { public long Id { get; set; } public string Name { get; set; } public bool IsComplete { get; set; } } }
該Id屬性用作關(guān)系數(shù)據(jù)庫中的唯一鍵。
模型類可以在項目中的任何位置,但模型文件夾按慣例使用。
添加數(shù)據(jù)庫上下文
該數(shù)據(jù)庫上下文是協(xié)調(diào)實體框架功能的數(shù)據(jù)模型的主要類。該類是通過派生類創(chuàng)建的Microsoft.EntityFrameworkCore.DbContext。
右鍵單擊Models文件夾,然后選擇Add>Class,將類命名為TodoContext,然后單擊“添加”。
使用以下代碼替換模板代碼:
using Microsoft.EntityFrameworkCore; namespace TodoApi.Models { public class TodoContext : DbContext { public TodoContext(DbContextOptions options) : base(options) { } public DbSet TodoItems { get; set; } } }
注冊數(shù)據(jù)庫上下文
在ASP.NET Core中,必須使用依賴注入(DI)容器注冊DB上下文等服務(wù)。容器為控制器提供服務(wù)。
使用以下突出顯示的代碼更新Startup.cs:
// Unused usings removed using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using TodoApi.Models; namespace TodoApi { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the //container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext(opt => opt.UseInMemoryDatabase("TodoList")); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } // This method gets called by the runtime. Use this method to configure the HTTP //request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { // The default HSTS value is 30 days. You may want to change this for // production scenarios, see //aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseMvc(); } } }
上面的代碼:
刪除未使用的using聲明。
將數(shù)據(jù)庫上下文添加到DI容器。
指定數(shù)據(jù)庫上下文將使用內(nèi)存數(shù)據(jù)庫。
添加控制器
右鍵單擊“控制器”文件夾。
選擇添加>新項。
在“添加新項”對話框中,選擇“API控制器類”模板。
將類命名為TodoController,然后選擇Add。
使用以下代碼替換模板代碼:
using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using TodoApi.Models; namespace TodoApi.Controllers { [Route("api/[controller]")] [ApiController] public class TodoController : ControllerBase { private readonly TodoContext _context; public TodoController(TodoContext context) { _context = context; if (_context.TodoItems.Count() == 0) { // Create a new TodoItem if collection is empty, // which means you can't delete all TodoItems. _context.TodoItems.Add(new TodoItem { Name = "Item1" }); _context.SaveChanges(); } } } }
上面的代碼:
定義沒有方法的API控制器類。
使用[ApiController]屬性裝飾類,此屬性指示控制器響應(yīng)Web API請求。
使用DI將數(shù)據(jù)庫context(TodoContext)注入控制器,數(shù)據(jù)庫上下文用于控制器中的每個CRUD方法。
如果數(shù)據(jù)庫為空,則向數(shù)據(jù)庫添加名為Item1的項。此代碼位于構(gòu)造函數(shù)中,因此每次有新的HTTP請求時它都會運行。如果刪除所有項目,構(gòu)造函數(shù)將在下一次調(diào)用API方法時再次創(chuàng)建Item1。所以當(dāng)刪除操作真正起作用的時候,它可能看起來并沒有起作用。
添加Get方法
要提供檢索待辦事項的API,請將以下方法添加到TodoController類中:
// GET: api/Todo [HttpGet] public async Task GetTodoItems() { return await _context.TodoItems.ToListAsync(); } // GET: api/Todo/5 [HttpGet("{id}")] public async Task GetTodoItem(long id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } return todoItem; }
這些方法實現(xiàn)了兩個GET端點:
GET /api/todo
GET /api/todo/{id}
如果應(yīng)用程序還在運行,就停止它,然后再次運行,這樣才能包含最新的更改。
通過從瀏覽器調(diào)用這兩個端點來測試應(yīng)用程序。例如:
//localhost:
//localhost:
調(diào)用GetTodoItems生成以下HTTP響應(yīng):
[ { "id": 1, "name": "Item1", "isComplete": false } ]
路由和URL路徑
該[HttpGet]屬性表示響應(yīng)HTTP GET請求的方法。每個方法的URL路徑構(gòu)造如下:
從控制器的Route屬性中的模板字符串開始:
namespace TodoApi.Controllers { [Route("api/[controller]")] [ApiController] public class TodoController : ControllerBase { private readonly TodoContext _context;
用控制器的名稱替換[controller],按照慣例,控制器類名減去“controller”后綴。例如控制器類名是TodoController,因此控制器名是“todo”。ASP.NET核心路由不區(qū)分大小寫。
如果[HttpGet]屬性有一個路由模板(例如[HttpGet("products")]),則將其附加到路徑。
在下面的GetTodoItem方法中,“{id}”是一個占位符變量,用于to-do項的唯一標(biāo)識符。當(dāng)調(diào)用GetTodoItem時,URL中的“{id}”值將提供給itsid參數(shù)。
// GET: api/Todo/5 [HttpGet("{id}")] public async Task GetTodoItem(long id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } return todoItem; }
*由于內(nèi)容過多,本文分為上、下篇發(fā)布,若想了解更多,請點擊如何使用ASP.NET Core創(chuàng)建Web API(下)查看。
想要了解 Visual Studio 更多資源的伙伴,請點這里。
想要獲取 Visual Studio 正版授權(quán)的伙伴,
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn