本篇重點
- 環境布局
- 建立Function
- 小範例
環境布局
STEP1:在controller頁面中,加上路徑宣告,代表這支API的網址路徑。 <br/>
[Route("api/Test")]
[ApiController]
同時導入模型:
using API_Test.Models;
using Execute_storedProcedure_DotnetCore.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.OpenApi.Expressions;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using Microsoft.Data.SqlClient;
STEP2:加入以下程式碼。 <br//>
// ClassBaseDB
private readonly TestDbConext _dbcontext;
public TestController(TestDbConext dbConext)
{
_dbcontext = dbConext;
}
建立Function
以下是範例架構,我們會在Fuction最前方加上錯誤控制。<br/> ‘SelTest’是該支API路徑的宣告,到時候的網址會呈現 api/Test/SelTest。<br/>
[HttpPost("SelTest")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public ActionResult SelTest()
{
//事件程式碼
return Ok();
}
如果有參數傳進來,就會放在SelTest()括號中。
範例演示
現在直接透過小範例跟大家介紹。這是一支查詢球場資料的API。 <br/>
STEP1:首先在MSSQL中建立一張球場資料表,欄位有:FID(編號)、FName(名稱)、FIntroduce(介紹)、Fairways(道數)、FType(類型)、TID(球隊編號)。 <br/>
STEP2:接著將預存程序加入到資料庫專案中。 <br/>
加入的方式請參考這篇文章: [ASP.NET] #4 SQL預存程序連線方法
將指令改寫為以下範例,並將檔名改成 usp_Sel_SField.sql。 <br/>
CREATE Procedure usp_Sel_SField
AS
SELECT FName, FID, FType FROM Field
GO
從 Field 中查出 FName, FID, FType。
STEP3:完成後到 DBData.cs、ClassBaseDB.cs 中去定義資料型態。 <br/>
ClassBaseDB.cs :
public virtual DbSet<Field> Field { get; set; }
宣告一個清單<Field>,把從資料庫撈出來的資料丟進清單中。
<br/>
DBData.cs:
public class Field
{
[Key]
public string FID { get; set; }
public string FName { get; set; }
public int FType { get; set; }
}
在清單<Field>裡面,再去宣告撈出來的資料型態。從資料庫查出了幾個欄位,就要定義幾個參數。
<br/>
紅色方框中的名稱是相互對應的。
STEP4:在 ResData.cs 定義回傳給前端的值。 <br/>
public class ResData //回傳一般訊息
{
public string State { get; set; }
public string Msg { get; set; }
}
public class Res_Field //回傳球場資訊
{
public string State { get; set; }
public List<Field> Data { get; set; }
}
ResData:包含兩個回傳值 State (Ok/Err)、Msg (訊息)。<br/> Res_Field:包含兩個回傳值 State (Ok/Err)、Data (球場的資訊)。 <br/> 要注意 Data 的型態是清單,可以將從資料庫撈出來的資料丟進清單中回傳給前端。
STEP5:撰寫後端程式。 <br/>
//執行預存程序,並將資料丟進<Field>中
List<Field> FieldData = _dbcontext.Field.FromSqlRaw("EXEC usp_Sel_SField").ToList();
//若有查出資料,執行以下程式
if (FieldData.Count != 0)
{
//宣告回傳欄位的清單
List<Res_Field> Res;
Res = new List<Res_Field>{
new Res_Field {State="OK",Data=FieldData}
};
return Ok(Res);
}
else //若沒有查出資料,執行以下程式
{
//宣告回傳欄位的清單
List<ResData> Res;
Res = new List<ResData>{
new ResData {State="Err",Msg="查無球場資料!"}
};
return NotFound(Res);
};
STEP6:最後一步就是按執行。 按完後會出現底下的畫面,讓開發人員能夠做測試,而實際上的API是沒有介面的。 <br/>
點開「Try it out」。<br/>
點開「Excute」。<br/>
這支API沒有傳任何參數進去,所以顯示’No parameters’。如果碰到需要傳參數的話,在’Parameters’底下會有欄位可以輸入。
成功執行後回傳的值會長這樣:<br/>
