[ASP.NET WebAPI] #4 寫第一支API

本篇重點

  • 環境布局
  • 建立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;

螢幕擷取畫面 2023-08-17 154849

STEP2:加入以下程式碼。 <br//>

// ClassBaseDB
private readonly TestDbConext _dbcontext;
public TestController(TestDbConext dbConext)
 {
   _dbcontext = dbConext;
 }

螢幕擷取畫面 2023-08-17 154944

建立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();
}

螢幕擷取畫面 2023-08-17 155009

如果有參數傳進來,就會放在SelTest()括號中。

範例演示

現在直接透過小範例跟大家介紹。這是一支查詢球場資料的API。 <br/>

STEP1:首先在MSSQL中建立一張球場資料表,欄位有:FID(編號)、FName(名稱)、FIntroduce(介紹)、Fairways(道數)、FType(類型)、TID(球隊編號)。 <br/>

螢幕擷取畫面 2023-08-18 100900

STEP2:接著將預存程序加入到資料庫專案中。 <br/>

加入的方式請參考這篇文章: [ASP.NET] #4 SQL預存程序連線方法

螢幕擷取畫面 2023-08-18 105132

將指令改寫為以下範例,並將檔名改成 usp_Sel_SField.sql。 <br/>

CREATE Procedure usp_Sel_SField

AS
SELECT FName, FID, FType FROM Field
GO

從 Field 中查出 FName, FID, FType。

螢幕擷取畫面 2023-08-18 113626

STEP3:完成後到 DBData.cs、ClassBaseDB.cs 中去定義資料型態。 <br/>

ClassBaseDB.cs :

public virtual DbSet<Field> Field { get; set; }

宣告一個清單<Field>,把從資料庫撈出來的資料丟進清單中。

螢幕擷取畫面 2023-08-18 114629 <br/>

DBData.cs:

public class Field
 {
   [Key]
   public string FID { get; set; }
   public string FName { get; set; }
   public int FType { get; set; }
  }

在清單<Field>裡面,再去宣告撈出來的資料型態。從資料庫查出了幾個欄位,就要定義幾個參數。

螢幕擷取畫面 2023-08-18 114146 <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 的型態是清單,可以將從資料庫撈出來的資料丟進清單中回傳給前端。

螢幕擷取畫面 2023-08-18 135354

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);
};

螢幕擷取畫面 2023-08-18 143823

STEP6:最後一步就是按執行。 按完後會出現底下的畫面,讓開發人員能夠做測試,而實際上的API是沒有介面的。 <br/>

螢幕擷取畫面 2023-08-18 144301

點開「Try it out」。<br/>

螢幕擷取畫面 2023-08-18 144310

點開「Excute」。<br/>

這支API沒有傳任何參數進去,所以顯示’No parameters’。如果碰到需要傳參數的話,在’Parameters’底下會有欄位可以輸入。


成功執行後回傳的值會長這樣:<br/>

螢幕擷取畫面 2023-08-18 144810