IRONSOFTWAREHOME
開發者更新

Nswag C#(對於開發者的運行原理)

Jacob Mellor,首席技術官 @ Team Iron
Jacob Mellor
Updated: 2026年4月21日

API 在現今的軟體開發環境中至關重要,因為它們促進了各種軟體系統和元件之間的溝通。 為了讓開發者有效地使用 API,必須有完整且易於理解的文件。 兩個可幫助 C# API 文件工作流程的有效工具是 NSwag C# 和 IronPDF。 本文將討論如何使用 NSwag 生成API 規範,配合 .NET Core並使用 IronPDF 將這些規範產生高品質的 PDF 文件。

How to Use NSwag in C#

  1. 使用 Swagger UI 建立 RESTful Web API。
  2. 建立 C# 控制台應用程式。
  3. 安裝 NSwag 程式庫。
  4. 匯入命名空間並建立物件。
  5. 將 Swagger JSON 處理為 C# 程式碼。
  6. 執行程式並顯示結果。

了解 NSwag

一個叫做 NSwag 的 .NET Swagger 工具鏈被建立出來,以便於為使用 ASP.NET Web API、ASP.NET Core 或其他 .NET 架構構建的 API 建立 Swagger 規範或 OpenAPI 文件。

NSwag 的特點

生成 Swagger 規範

控制器、模型和 .NET 程式集都可以由 NSwag 自動生成 Swagger 規範。 NSwag 通過檢查 API 程式碼的結構生成涵蓋 API 端點、請求/回應格式、身份驗證技術等的全面文件。

與 .NET 專案的連接

開發者可以通過將 NSwag 與 .NET 專案整合,輕鬆地將 Swagger 生成納入他們的開發過程。 開發者可以通過將 NSwag 新增到 .NET Core 專案,以確保文件隨著程式碼基礎更新,這將在每次構建專案時自動生成 Swagger 規範。

個性化和擴展

NSwag 提供的多種自訂選項,讓開發者可以輕鬆地調整生成的 Swagger 規範以滿足他們的獨特需求。 開發者可以通過配置設定和註釋控制生成文件的許多組件,包括響應程式碼、參數解釋和路由命名規則。

開始使用 NSwag

在 C# 控制台應用中設置 NSwag

NSwag 基礎類函式庫包括核心、註釋和程式碼生成命名空間,應該可以透過從 NuGet 安裝獲取。 將 NSwag 整合到 C# 應用程式中以生成程式碼和 Swagger 規範,以及 NSwag 如何改善開發過程的效率。

NSwag C#(開發者如何工作):圖 1 - 在 Visual Studio 套件管理器中瀏覽 NSwag 並安裝

在 Windows 控制台和表單中實作 NSwag

透過自動化客戶端生成,開發者可以有效地從桌面應用程式中整合 NSwag 生成存取 API 的程式碼。 在開發與在線服務或 RESTful API 通信的桌面應用程式時,這可能非常有幫助。

NSwag 可以在 Web 應用程式中用來生成內部 API 的 API 文件和使用外部 API 的客戶端程式碼。這有助於開發者保持其應用程式的前端和後端元件一致。

NSwag C# 範例

以下是顯示如何使用 NSwag 生成 C# 客戶端程式碼的範例程式碼:

using NSwag.CodeGeneration.CSharp;
using NSwag;
using System.Reflection;
using System.CodeDom.Compiler;
using Microsoft.CodeAnalysis;
using System.Net.Http;
using System.IO;
using System.Collections.Generic;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (var wclient = new System.Net.WebClient())
        {
            // Create JSON file data from the Swagger .NET Core web API
            var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString("http://localhost:5013/swagger/v1/swagger.json"));
            var settings = new CSharpClientGeneratorSettings
            {
                ClassName = "Weather",
                CSharpGeneratorSettings = { Namespace = "Demo" }
            };

            var generator = new CSharpClientGenerator(document, settings);
            var code = generator.GenerateFile();
            var assembly = CompileCode(code);
            var clientType = assembly.GetType("Demo.WeatherClient"); // Replace with your actual client class name
            using (var httpClient = new HttpClient())
            {
                var client = (IApiClient)Activator.CreateInstance(clientType, httpClient);
                var result = await client.GetWeatherForecastAsync();
                foreach (var item in result)
                {
                    Console.WriteLine($"Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}");
                }
            }
        }
    }

    static Assembly CompileCode(string code)
    {
        using (var memoryStream = new MemoryStream())
        {
            var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location);
            var references = new List<MetadataReference>
            {
                MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "Microsoft.AspNetCore.Mvc.dll")),
                MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Private.CoreLib.dll"))
            };

            var compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("ApiClient")
                .WithOptions(new Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
                .AddReferences(references)
                .AddSyntaxTrees(Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(code));

            var emitResult = compilation.Emit(memoryStream);
            if (!emitResult.Success)
            {
                Console.WriteLine("Compilation errors:");
                foreach (var diagnostic in emitResult.Diagnostics)
                {
                    Console.WriteLine(diagnostic);
                }
                return null;
            }
            memoryStream.Seek(0, SeekOrigin.Begin);
            return Assembly.Load(memoryStream.ToArray());
        }
    }

    public interface IApiClient
    {
        // Replace with your actual method name and return type
        Task<List<WeatherForecast>> GetWeatherForecastAsync();
    }

    public class WeatherForecast
    {
        public DateTime Date { get; set; }
        public int TemperatureC { get; set; }
        public int TemperatureF { get; set; }
        public string Summary { get; set; }
    }
}

對於我們希望使用的 API,我們指定 Swagger 規範的 URL(swaggerUrl)。 然後,生成和執行的客戶端程式碼進入 DLL 程式集定義。 OpenApiDocument用于從給定的 URL 異步載入 Swagger 文件,使用FromJsonAsync。 要更改生成的客戶端程式碼,我們調整程式碼生成器的設置(CSharpClientGeneratorSettings)。 在此範例中,指定了生成的客戶端程式碼的類名和命名空間。

從載入的 Swagger 文件中,我們建立 CSharpClientGenerator 的實例並使用它來生成客戶端程式碼。 生成的客戶端程式碼被保存到指定的輸出路徑。 我們會對過程中可能出現的任何例外或錯誤作出回應,並在控制台中顯示相關通知。

NSwag C#(開發者如何工作):圖 2 - 上面的程式碼的控制台輸出

NSwag 運作

生成客戶端程式碼

NSwag 可以使用 Swagger 規範生成多種語言的客戶端程式碼,包括 Java、TypeScript 和 C#。 這使得開發者能夠簡單地在其應用程式中使用 API。

生成伺服器程式碼

以 Swagger 規範為基礎,NSwag 也可以生成伺服器程式碼,如 ASP.NET Core 控制器。 這有助於快速製作 API 實作的伺服器端程式碼。

生成互動式 API 文件

給定一個 Swagger 規範,NSwag 可以生成互動式 API 文件,如 Swagger UI。 此文件提供了一個易於使用的介面,用於瀏覽和測試 API 端點。

生成代理類

要與基於 SOAP 的 API 整合,NSwag 可以生成代理類。 這使得程式員能夠使用生成的客戶端程式碼從應用程式內部存取 SOAP 服務。

驗證 Swagger 規範

NSwag 能夠驗證 Swagger 規範,以確保它們遵循 OpenAPI/Swagger 標準。 這使得更容易看到 API 文件中的任何錯誤或不一致之處。

將 NSwag 與 IronPDF 整合

開發者可以藉由將 NSwag 與 IronPDF 結合起來,利用這兩個技術的優勢來改善 API 文件的工作流程。 開發者可以藉由使用 NSwag 生成 Swagger 規範和IronPDF 將其轉換為 PDF,生成完整、可離線使用的 .NET Web API 文件,這些文件隨時可存取且可共享。 整合過程包括以下步驟:

IronPDF在HTML到PDF的轉換中表現出色,確保精確保留原始佈局和樣式。 它非常適合從基於網路的內容(如報告、發票和文件)建立PDF文件。 用於HTML文件、URL和原始HTML字串的支持,IronPDF可以輕鬆生成高品質的PDF文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

安裝IronPDF

  • 開啟Visual Studio專案。
  • 選擇"工具" > "NuGet套件管理員" > "套件管理員主控台"。
  • 打開您的命令提示符,在套件管理器控制台中鍵入以下命令:

PM > Install-Package IronPdf

  • 或者,您可以使用NuGet套件管理器為方案來安裝IronPDF。
  • 瀏覽和選擇 IronPDF 套件從搜尋結果中,然後點擊"安裝"選項。 Visual Studio將代表您處理下載和安裝。

NSwag C# (How It Works For Developers): Figure 3 - Install IronPDF using the Manage NuGet Package for Solution by searching "IronPDF" in the search bar of NuGet Package Manager, then select the project and click on the Install button.

  • NuGet 會安裝 IronPDF 套件及您的專案所需的任何依賴項。
  • 安裝後,IronPDF 可以用於您的專案。

通過NuGet網站安裝

有關 IronPDF 功能、相容性和可用下載的更多資訊,請存取IronPDF 在 NuGet 上的頁面

使用DLL安裝

或者,您可以通過其 DLL 檔案直接將 IronPDF 整合到您的專案中。要下載包含 DLL 的 ZIP 檔,請點擊IronPDF 下載連結。 解壓縮文件並將DLL新增到您的專案中。

實施邏輯

通過使用 NSwag,開發者可以更快地使用 CodeGeneration.CSharp 結合 IronPDF 生成 API 文件和客戶端程式碼。 整合工作流程包括以下步驟:

  1. **生成客戶端程式碼:**使用 NSwag.CodeGeneration.CSharp 從 Swagger 規範建立 C# 客戶端程式碼。 客戶端類和方法的建立過程被自動化,以便與 API 端點通信。
  2. **使用 NSwag 獲取資料:**使用 CodeGeneration.CSharp 從 Swagger 規範生成 JSON 文件。 在此階段,請求/回應格式、身份驗證技術和 API 客戶端端點被製作成人類可讀的文件。
  3. **將 JSON 轉換為 PDF:**使用 IronPDF,將生成的程式碼結果轉換為 PDF 文件。 在這個階段,HTML 文字被轉換為一份精美的 PDF 文件,準備好共享和發送。
  4. **改善 PDF 文件:**使用 IronPDF 向 PDF 文件中新增更多內容,例如頁眉、頁腳、水印或獨特品牌。 這個階段讓開發者能夠根據自己的喜好來個性化 PDF 文件的外觀和品牌。
using IronPdf;
using System.Text;
using System.Collections.Generic;

StringBuilder sb = new StringBuilder();

foreach (var item in result)
{
    sb.Append($"<p>Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}</p>");
}

var renderer = new HtmlToPdf();
var pdf = renderer.RenderHtmlAsPdf(sb.ToString());
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully!");
Console.ReadKey();

上面的程式碼從結果物件中獲取檢索到的資料,並在迴圈中將 TemperatureCSummary 字段附加到段落中。然後指定 PDF 的輸出檔案路徑,並通知使用者已成功生成 PDF。

以下是上面程式碼的結果。

NSwag C#(開發者如何工作):圖 4 - 上面程式碼的例子輸出

結論

CodeGenerationCSharp 和 IronPDF 這樣的 NSwag 技術協作良好,可以簡化客戶端程式碼生產和 API 文件流程。 開發者可以透過將這些工具整合到 C# 應用程式中,加速 API 驅動解決方案的開發,並自動化 API 文件的建立,生成專業的 PDF 出版物。 NSwag.CodeGeneration.CSharp 使用 IronPDF 提供開發者有效地記錄 API 和在 C# 中生成客戶程式碼的完整解決方案,無論他們是在開發桌面、Web 還是基於雲端的應用程式。

Lite 套裝包含一個永久授權、一年的軟體維護和進行程式庫升級。 IronPDF提供免費授權,但在再分發和時間上有限制。使用者可以在試用期間不必查看浮水印來評估此解決方案。 有關價格和授權的詳細資訊,請參閱IronPDF 授權資訊。 若要獲取更多關於 Iron Software 產品程式庫的資訊,請前往Iron Software 程式庫頁面

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立