翻譯|使用教程|編輯:陳津勇|2019-08-28 14:25:30.720|閱讀 600 次
概述:本教程介紹了使用ASP.NET Core構(gòu)建Web API的基礎(chǔ)知識(shí)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷售中 >>
在本教程中,您將學(xué)習(xí)如何:
創(chuàng)建一個(gè)Web API項(xiàng)目 | √ |
添加模型類和數(shù)據(jù)庫(kù)上下文 | √ |
添加控制器 | √ |
添加CRUD方法 | √ |
配置路由和URL路徑 | √ |
指定返回值 | √ |
使用Postman調(diào)用Web API | √ |
使用jQuery調(diào)用Web API | √ |
最后,您有一個(gè)Web API,可以管理存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的“待辦事項(xiàng)”。
本教程將創(chuàng)建以下API:
下圖顯示了應(yīng)用程序的設(shè)計(jì):
使用Visual Studio 2019創(chuàng)建Web項(xiàng)目
大家都知道,Visual Studio 2019具有ASP.NET和Web開(kāi)發(fā)工作負(fù)載,那么如何使用VS 2019創(chuàng)建一個(gè)Web項(xiàng)目呢?只需以下四個(gè)步驟:
從文件菜單中,選擇新建 > 項(xiàng)目。
選擇ASP.NET Core Web Application模板,然后單擊Next。
將項(xiàng)目命名為T(mén)odoApi,然后單擊“ 創(chuàng)建”。
在“ 創(chuàng)建新的ASP.NET核心Web應(yīng)用程序”對(duì)話框中,確認(rèn)已選中.NET Core和ASP.NET Core 2.2。選擇API模板,然后單擊“ 創(chuàng)建”,不要選擇啟用Docker支持。
測(cè)試API
項(xiàng)目模板創(chuàng)建一個(gè)values API。從瀏覽器中調(diào)用Get方法來(lái)測(cè)試應(yīng)用程序。
按Ctrl + F5運(yùn)行該應(yīng)用程序。Visual Studio啟動(dòng)瀏覽器并導(dǎo)航到//localhost:
如果出現(xiàn)一個(gè)對(duì)話框,詢問(wèn)您是否應(yīng)該信任IIS Express證書(shū),請(qǐng)選擇“ 是”。在接下來(lái)出現(xiàn)的“ 安全警告”對(duì)話框中,選擇“ 是”。
返回以下JSON:
["value1","value2"]
添加模型類
模型是一組表示應(yīng)用程序管理的數(shù)據(jù)的類。這個(gè)應(yīng)用程序的模型是一個(gè)單獨(dú)的TodoItem類。
在解決方案資源管理器中,右鍵單擊項(xiàng)目。選擇添加 > 新建文件夾。將文件夾命名為Models。
右鍵單擊Models文件夾,然后選擇Add > Class。將類命名為T(mén)odoItem并選擇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ù)庫(kù)中的唯一鍵。
模型類可以在項(xiàng)目中的任何位置,但模型文件夾按慣例使用。
添加數(shù)據(jù)庫(kù)上下文
該數(shù)據(jù)庫(kù)上下文是協(xié)調(diào)實(shí)體框架功能的數(shù)據(jù)模型的主要類。該類是通過(guò)派生類創(chuàng)建的Microsoft.EntityFrameworkCore.DbContext。
右鍵單擊Models文件夾,然后選擇Add>Class,將類命名為T(mén)odoContext,然后單擊“添加”。
使用以下代碼替換模板代碼:
using Microsoft.EntityFrameworkCore; namespace TodoApi.Models { public class TodoContext : DbContext { public TodoContext(DbContextOptions options) : base(options) { } public DbSet TodoItems { get; set; } } }
注冊(cè)數(shù)據(jù)庫(kù)上下文
在ASP.NET Core中,必須使用依賴注入(DI)容器注冊(cè)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ù)庫(kù)上下文添加到DI容器。
指定數(shù)據(jù)庫(kù)上下文將使用內(nèi)存數(shù)據(jù)庫(kù)。
添加控制器
右鍵單擊“控制器”文件夾。
選擇添加>新項(xiàng)。
在“添加新項(xiàng)”對(duì)話框中,選擇“API控制器類”模板。
將類命名為T(mén)odoController,然后選擇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(); } } } }
上面的代碼:
定義沒(méi)有方法的API控制器類。
使用[ApiController]屬性裝飾類,此屬性指示控制器響應(yīng)Web API請(qǐng)求。
使用DI將數(shù)據(jù)庫(kù)context(TodoContext)注入控制器,數(shù)據(jù)庫(kù)上下文用于控制器中的每個(gè)CRUD方法。
如果數(shù)據(jù)庫(kù)為空,則向數(shù)據(jù)庫(kù)添加名為Item1的項(xiàng)。此代碼位于構(gòu)造函數(shù)中,因此每次有新的HTTP請(qǐng)求時(shí)它都會(huì)運(yùn)行。如果刪除所有項(xiàng)目,構(gòu)造函數(shù)將在下一次調(diào)用API方法時(shí)再次創(chuàng)建Item1。所以當(dāng)刪除操作真正起作用的時(shí)候,它可能看起來(lái)并沒(méi)有起作用。
添加Get方法
要提供檢索待辦事項(xiàng)的API,請(qǐng)將以下方法添加到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; }
這些方法實(shí)現(xiàn)了兩個(gè)GET端點(diǎn):
GET /api/todo
GET /api/todo/{id}
如果應(yīng)用程序還在運(yùn)行,就停止它,然后再次運(yùn)行,這樣才能包含最新的更改。
通過(guò)從瀏覽器調(diào)用這兩個(gè)端點(diǎn)來(lái)測(cè)試應(yīng)用程序。例如:
//localhost:
//localhost:
調(diào)用GetTodoItems生成以下HTTP響應(yīng):
[ { "id": 1, "name": "Item1", "isComplete": false } ]
路由和URL路徑
該[HttpGet]屬性表示響應(yīng)HTTP GET請(qǐng)求的方法。每個(gè)方法的URL路徑構(gòu)造如下:
從控制器的Route屬性中的模板字符串開(kāi)始:
namespace TodoApi.Controllers { [Route("api/[controller]")] [ApiController] public class TodoController : ControllerBase { private readonly TodoContext _context;
用控制器的名稱替換[controller],按照慣例,控制器類名減去“controller”后綴。例如控制器類名是TodoController,因此控制器名是“todo”。ASP.NET核心路由不區(qū)分大小寫(xiě)。
如果[HttpGet]屬性有一個(gè)路由模板(例如[HttpGet("products")]),則將其附加到路徑。
在下面的GetTodoItem方法中,“{id}”是一個(gè)占位符變量,用于to-do項(xiàng)的唯一標(biāo)識(shí)符。當(dāng)調(diào)用GetTodoItem時(shí),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)容過(guò)多,本文分為上、下篇發(fā)布,若想了解更多,請(qǐng)點(diǎn)擊如何使用ASP.NET Core創(chuàng)建Web API(下)查看。
想要了解 Visual Studio 更多資源的伙伴,請(qǐng)點(diǎn)這里。
想要獲取 Visual Studio 正版授權(quán)的伙伴,
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn