從今天開始來學習如何在 ASP.NET Core 中構建 Web API 以及每項功能的最佳適用場景。 ...
從今天開始來學習如何在 ASP.NET Core 中構建 Web API 以及每項功能的最佳適用場景。關於此次示例的資料庫創建請參考《學習ASP.NET Core Razor 編程系列一》 至 《學習ASP.NET Core Razor 編程系列十九——分頁》
一、概述
本教程將創建以下 Web API:
API |
說明 |
請求正文 |
響應正文 |
GET /api/Book |
獲取所有的書籍信息 |
None |
書籍的數組 |
GET /api/Book/{id} |
通過 ID 獲取書籍信息 |
None |
書籍信息 |
POST /api/Book |
添加書籍信息 |
書籍信息 |
書籍信息 |
PUT /api/Book/{id} |
根據ID更新現有書籍信息 |
書籍信息 |
None |
DELETE /api/Book/{id} |
根據ID刪除書籍 |
None |
None |
下圖顯示了這次我們所要創建的應用的設計。
二、創建 Web API項目
1) 我們打開Visual Studio 2017,在菜單中選擇“文件”菜單,然後選擇“新建” > “項目”。
2) 選擇“ASP.NET Core Web 應用程式”模板。 將項目命名為 BookApi,然後單擊“確定”。如下圖。
3) 在“新建 ASP.NET Core Web 應用程式 - BookApi”對話框中,選擇 ASP.NET Core 版本。 選擇“API”模板,然後單擊“確定”。 請不要選擇“啟用 Docker 支持”與“為HTTPS配置”。如下圖。
三、測試 API
現在我們已經創建了BookApi應用項目。ASP.NET Core MVC 項目模板會在我們新創建的BookApi項目中預設創建一個WebAPI—— values
API。
在Visual Studio 2017中按 F5 運行應用程式。然後啟動瀏覽器,併在瀏覽器地址欄中輸入 http://localhost:5000/api/values
,瀏覽器會調用Get方法進行測試,返回如下圖的 JSON,則證明我們的應用創建成功。
四、添加實體類
實體是一組表示應用管理的數據的類。 我們這次使用單個 Book
類,接下來我們來創建這個Book類。
1) 在Visual Studio 2017的“解決方案資源管理器”中,右鍵單擊項目。 選擇“添加” > “新建文件夾”。如下圖。
2) 將文件夾命名為“Models”。
3) 右鍵單擊“Models”文件夾,然後選擇“添加” > “類”。 將類命名為 Book,然後選擇“添加”。如下圖。
4)在Visual Studio 2017的“解決方案資源管理器”中打開我們剛纔創建的Book.cs文件,並輸入以下代碼:
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; namespace BookApi.Models { public class Book { public int ID { get; set; } [Required] [StringLength(50, MinimumLength = 2)] public string Name { get; set; } [Display(Name = "出版日期")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } [Range(1, 200)] [DataType(DataType.Currency)] public decimal Price { get; set; } public string Author { get; set; } [Required] public string Publishing { get; set; } [Timestamp] public byte[] RowVersion { get; set; } } }
Id
屬性用作關係資料庫中的唯一鍵。
實體類可位於項目的任意位置,但按照慣例會使用 Models 文件夾。
五、數據表創建腳本
我在這裡直接給出Book表的創建腳本,代碼如下。
CREATE TABLE [dbo].[Book]( [ID] [int] IDENTITY(1,1) NOT NULL, [Author] [nvarchar](max) NULL, [Name] [nvarchar](50) NOT NULL, [Price] [decimal](18, 2) NOT NULL, [ReleaseDate] [datetime2](7) NOT NULL, [Publishing] [nvarchar](max) NOT NULL, [RowVersion] [timestamp] NULL, CONSTRAINT [PK_Book] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]