前言
我們接續著上次的介紹,會把 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、整理成資料夾等方式,都大大便利許多,在此提供兩種方式以供大家參考。