前言

我們接續著上次的介紹,會把 CRUD 功能補齊。
CRUD 指的是Create(新增)、Read(查詢)、Delete(刪除)、Update(更新),也是最常運用到的功能。

本文

新增

1、首先我們先建立一個用來回傳的 Model。

建立 ResultModel

   public class ResultModel
    {
        /// <summary>
        /// 結果
        /// </summary>
        public bool Result { get; set; }

        /// <summary>
        /// 提示訊息
        /// </summary>
        public string Message { get; set; }
    }

2、把新增商品的 Repository 完成。

新增商品 Repository

        /// <summary>
        /// 新增一筆商品
        /// </summary>
        /// <param name="productModel"></param>
        /// <returns></returns>
        public bool CreateProduct(ProductModel productModel)
        {
            var sql = @"INSERT INTO products
                                (productname,
                                 supplierid,
                                 categoryid,
                                 quantityperunit,
                                 unitprice,
                                 unitsinstock,
                                 unitsonorder,
                                 reorderlevel,
                                 discontinued)
                         VALUES (@ProductName,
                                 @SupplierID,
                                 @CategoryID,
                                 @QuantityPerUnit,
                                 @UnitPrice,
                                 @UnitsInStock,
                                 @UnitsOnOrder,
                                 @ReorderLevel,
                                 @Discontinued) ";

            var parameters = new DynamicParameters();
            parameters.Add("@ProductName", productModel.ProductName);
            parameters.Add("@SupplierID", productModel.SupplierID);
            parameters.Add("@CategoryID", productModel.CategoryID);
            parameters.Add("@QuantityPerUnit", productModel.QuantityPerUnit);
            parameters.Add("@UnitPrice", productModel.UnitPrice);
            parameters.Add("@UnitsInStock", productModel.UnitsInStock);
            parameters.Add("@UnitsOnOrder", productModel.UnitsOnOrder);
            parameters.Add("@ReorderLevel", productModel.ReorderLevel);
            parameters.Add("@Discontinued", productModel.Discontinued);

            var connection = new SqlConnection(ConnectionHelper.ConnectionStr);

            var result = connection.Execute(sql, parameters);

            return result > 0;
        }

3、增加一個 Controller 接口來接收新增商品。

        [HttpPost]
        public ResultModel CreateProduct([FromBody] ProductModel productModel)
        {
            var result = new ResultModel();
            var repository = new ProductRepository();

            var data = repository.UpdateProduct(productModel);

            if (data == true)
            {
                result.Result = data;
                result.Message = "新增商品成功";
            }
            else
            {
                result.Result = data;
                result.Message = "新增商品失敗,請重試";
            }

            return result;

4、測試方法

因為這個方法使用的是 Post,所以需要透過模擬瀏覽器送資料的方式。
這邊介紹兩種我常用的方法。

方法一:PostMan

到網站下載後進行安裝。
打開 PostMan 進行登入後我們會看到以下畫面。

首先我們先建立一個測試方法,點選 +。

選擇方法 Post,並選擇Body > raw > json的方式,把資料填滿。

{
    "ProductName": "testProduct",
    "SupplierID": 1,
    "CategoryID": 1,
    "QuantityPerUnit": "1k pkg.",
    "UnitPrice": 10.5,
    "UnitsInStock": 2,
    "UnitsOnOrder": 50,
    "ReorderLevel": 10,
    "Discontinued": false
}

settings 將兩個選項改為ON。

點選 Send。

新增完後可以透過上次的 Get 方法確認資料。

方法二:Swagger

首先先到 Nuget 安裝頁面搜尋 Swashbuckle,選擇 Swashbuckle.AspNetCore 安裝。

安裝完成後到 startup.cs。
在 ConfigureServices 註冊 swagger。

services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApiPhase1", Version = "v1" });
                // 取得xml文件名稱
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                // 取得xml path
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                // 顯示controller註解
                options.IncludeXmlComments(xmlPath, true);
            });

在 Configure 中啟用 swagger,並指定存放的 JSON 位置。

            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApiPhase1");
            });

接下來要到專案屬性設定產生 xml 檔案,首先點選 webapplication1 右鍵選擇屬性。

選擇建置,在輸出的地方把XML文件檔案打勾,並儲存。

接下來我們回到 contorller 補上註解。

運行專案,在 port 之後輸入 swagger,即可看到頁面。

點選 try it,點選 excute 即可進行測試。

而 post 的方式也可以直接透過網頁輸入參數。

一樣可以透過 GET 確認新增資料。

後記

目前工作上如果是要透過網頁測試 API 正不正常我就會使用 Swagger;但大多時間都是使用 POSTMAN,因為可以儲存參數、ROUTER、整理成資料夾等方式,都大大便利許多,在此提供兩種方式以供大家參考。

參考資料