使用C#創建服務端Web API

前言

C# Web API 是一種基於 .NET 平臺(包括但不限於.NET Framework 和 .NET Core)構建 HTTP 服務的框架,用於創建 RESTful Web 服務。REST(Representational State Transfer)是一種軟件架構風格,它利用HTTP協議的特性(如GET、POST、PUT、DELETE等方法)來操作資源。

在 C# 中,ASP.NET Web API 提供了一種模式和工具集,使得開發者能夠方便地設計和實現對外暴露的API接口,這些接口可以被各種客戶端應用程序(如Web瀏覽器、移動應用、桌面應用或其他服務器端應用)通過HTTP請求來調用,進而獲取或修改數據。

使用 ASP.NET Web API 的特點和優勢包括:

(1)模塊化與分離關注點:控制器(Controllers)負責處理HTTP請求,模型(Models)代表業務對象,視圖模型(ViewModels)可以用來適配不同客戶端的數據需求,以及路由機制(Routes)將URL映射到特定的操作。

(2)RESTful 架構支持:它鼓勵開發人員遵循 REST 設計原則,提供資源導向的服務,允許客戶端通過標準HTTP方法訪問資源。

(3)跨平臺兼容性:尤其是在 .NET Core 上,Web API 可以運行在Windows、Linux 和 macOS 等多種操作系統之上。

(4)內容協商與格式化器:Web API 自動處理不同客戶端要求的數據格式,例如JSON、XML或其他自定義格式。

(5)安全性與認證授權:內置了對OAuth、JWT等多種安全策略的支持,以便實施靈活且安全的API訪問控制。

(6)測試友好:由於其基於HTTP,Web API 容易進行單元測試和集成測試,並且可以配合Postman、Swagger等工具進行接口文檔生成和測試。

(7)擴展性:Web API 具有高度可擴展性,可以通過中間件、過濾器等方式增強功能,適應複雜的企業級應用需求。

今天小編就將爲大家介紹一下如何使用C#在葡萄城公司的企業級低代碼平臺——活字格進行接口擴展。

活字格中的Web API

在活字格中,支持使用C#或VB.Net語言實現,可以運行在服務端,瀏覽器可以通過HTTP請求的方式調用服務端提供的Web API。

環境準備

編譯器:Visual Studio、Visual Studio Code、IntelliJ IDEA Rider etc...(選擇自己喜歡的即可);

依賴環境:系統需要安裝Dot Net 6.0運行環境(下載請戳);

使用語言:C#或VB.Net;

其他:C#基礎知識及編程能力。

創建服務端Web API

1、打開編譯器,這裏使用的是IntelliJ IDEA Rider,選擇Class Library(類庫),Framework選擇net6.0。如下圖:

2、選擇完成後,點擊"Create"創建類庫項目,一個新建的類庫項目就創建完成了。

3、接下來因爲創建的是活字格的Web API,所以我們需要添加活字格的類庫引用,用於與活字格進行交互和編程擴展。在新建的項目中選擇"Dependencies"右鍵選擇"Reference"添加引用。

4、點擊"Add From"從活字格的安裝路徑下引用"GrapeCity.Forguncy.ServerApi.dll"文件,這裏需要注意的是:

  • 如果安裝活字格服務端時,安裝目錄爲默認目錄,則此文件的路徑爲:C:\Program Files\ForguncyServer\Website\bin
  • 如果安裝活字格服務端時,安裝目錄爲自定義路徑,則此文件的路徑爲"自定義路徑\ForguncyServer\Website\bin"

5、添加成功後,右鍵項目,選擇"Edit"——"Edit xxx.csproj"。

6、在打開的csproj文件中添加下面代碼並保存:

<ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

以上我們就完成了基本的準備工作,接下來爲大家介紹Web API的編寫和使用。

編寫服務端Web API

爲了說明清楚,這裏列舉一個示例,示例的功能爲用Web API可以接收標準化JSON數據。

1、創建一個public class,使其從GrapeCity.Forguncy.ServerApi命名空間的ForguncyApi類繼承。

2、當通過HTTP的GET或POST調用方法時,可以通過ServerApi的Context屬性獲取請求的詳細信息。Context屬性是Asp.net Core的HttpContext類型,通過Request屬性可以獲取HTTP請求的全部信息。我們的示例中使用的是POST方法,所以我們新建一個Task方法,並用"[Post]"註解。

3、接下來,我們就可以在方法中書寫自己的邏輯了,這裏我們的代碼具體如下,爲了讓活字格命令可以直接接收數組JSON數據,邏輯爲當請求我們這個Web API時,會先從請求地址上拿到要調用的服務端命令名稱,把標準化的數組JSON數據包了一層,包成了參數爲"data"新的一個JSON數據,這樣調用的服務端命令就可以使用data參數接收數組JSON參數了。具體在活字格中的使用後面會介紹。

using System.Text;
using System.Text.Json;
using GrapeCity.Forguncy.ServerApi;

namespace MyApiTest;

public class RequestBodyHandler : ForguncyA
{
    [Post]
    public async Task ReceiveApiRequest()
    {
        var request = Context.Request;
        var serverCommandName = request.Query["serverCommandName"]; // 從URL中取參數
        if (request.ContentType != null && request.ContentType.Equals("application/json"))
        {
            var sr = new StreamReader(request.Body);
            string content = await sr.ReadToEndAsync();

            var obj = new { data = content };
            string newContent = JsonSerializer.Serialize(obj).Replace("/r/n", "");

            using HttpClient httpClient = new HttpClient();
            var baseAddress = $"{request.Scheme}://{request.Host}{request.PathBase}/ServerCommand/{serverCommandName}";
            HttpContent httpContent = new StringContent(newContent, Encoding.UTF8, "application/json");
            HttpResponseMessage responseMessage = await httpClient.PostAsync(baseAddress, httpContent);

            if (responseMessage.IsSuccessStatusCode)
            {
                await responseMessage.Content.ReadAsStringAsync();
            }
            else
            {
                throw new Exception($"Error: {responseMessage.StatusCode}");
            }
        }
        else
        {
            throw new HttpRequestException("ContentType error, please check request content!");
        }
    }
}

4、書寫完成我們需要的邏輯後,右鍵項目點擊"Build Selected Projects"進行項目Build打包。

5、完成Build打包後,在剛纔我們新建類庫項目的目錄下,找到生成的dll文件。

6、打開活字格設計器,上傳我們打包的dll文件到活字格工程中,可以看到,上傳dll後,API列表中會顯示Web API的請求地址。

7、接下來,回到我們的活字格設計器工程中,我們新建一個服務端命令,服務端命令的名稱命名爲"RedirectCommand",並設置一個參數值爲"data",然後用返回命令將接收的數據保存到表裏。注意:服務端命令需要設置爲任何人可調用。

8、這裏我們藉助API調試工具向剛纔我們創建的Web API發送一個請求,先將活字格工程本地運行起來,Web API的調用URL如下:

http://域名或主機名/應用程序名/類名/方法名

例如:http://www.xxx.com/CRM/customapi/sampleapi/addsampledata

我們運行的是本地服務,所以可以使用localhost進行測試,如下圖:

9、發送請求,可以發現,活字格中已經將產生的數據接收到並保存到了數據表中。

以上,我們利用Web API對數據進行了“預處理”,轉發給了活字格中的服務端命令中,在活字格服務端命令中就可以進一步處理這種數組JSON數據啦。

調試服務端Web API

編碼當然離不開調試,當然了,Web API也不例外,接下來就爲大家介紹調試的方式方法。

1、首先需要先運行上傳了打包完成的Web API dll文件的活字格工程。

2、可以看到本地服務會有一個唯一端口號,回到我們的編譯器中,選擇"Run"——"Attach to Process"附加到進程。

3、搜索剛纔活字格本地服務的端口號,點擊附加到進程。

4、然後在代碼左側打斷點即可。

5、當觸發Web API的調用後,就可以看到代碼已經可以進行調試了。

修改代碼後再次調試

代碼很難一次編寫地完全正確,如果修改代碼,需要執行以下步驟:

  1. 修改代碼。
  2. 編譯工程。
  3. 在活字格設計器中刪除之前的dll文件。
  4. 上傳新的dll文件。
  5. 運行活字格應用程序。
  6. 通過編譯器的“調試->附加到進程”重新附加到ForguncyServerConsole.exe進程上。
  7. 打斷點調試。
  8. 如果還需要修改代碼回到第一步,直到修正所有問題。

最後附上完整的代碼工程文件:https://gitee.com/GrapeCity/my-api-test

總結

以上就是使用C#創建活字格服務端Web API的全過程,如果您想了解更多信息,歡迎點擊這裏查看。

擴展鏈接:

如何使用 Blazor 框架在前端瀏覽器中導入/導出 Excel XLSX

簡便實用:在 ASP.NET Core 中實現 PDF 的加載與顯示

如何在.NET電子表格應用程序中創建流程圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章