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