跳過到頁腳內容
.NET幫助

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

透過在C#中將RefitIronPDF結合,將兩個強大程式庫的最佳功能結合在一起,產生出無比高效的應用程式。 Refit利用C#特性讓開發人員設計API接口,並自動生成HTTP請求,保證類型安全的API訪問,從而使使用RESTful API變得更簡單。 相反,IronPDF提供了大量強大的功能來處理PDF文件,包括合併和註釋PDF以及轉換HTML內容。 這些程式庫在結合時提供了流暢的數據呈現和檢索工作流程。 透過使用像Refit這樣的工具從API檢索數據和IronPDF來根據這些數據生成詳細、高品質的PDF報告,可以使數據驅動的應用程式開發更加高效和富有成效。

什麼是Refit C#?

Refit是一個開源的.NET框架,通過使用聲明性、類型安全的方法來簡化向RESTful API發送HTTP請求的過程。Refit通過將API端點指定為用C#界面裝飾的特性來自動生成所需的HTTP客戶端代碼。 這大大減少了樣板代碼並提高了代碼的可讀性。 這種技術通過在編譯而非執行期間檢測錯誤,確保方法簽名正確匹配API端點。

此外,Refit輕鬆處理JSON序列化和反序列化,讓開發人員可以與C#對象互動,而不必手動轉換API回應。 通過在介面規範中直接定義HTTP方法、標頭和參數,特性使配置更加簡單。 由於當API端點更新時,需要修改的客戶端代碼較少,代碼變得更簡單且更易於維護。

舉例來說,Refit可以透過在介面中創建一個帶有[Get("/users/{id}")]特性的方法來生成用戶名所需的HTTP GET請求。 然後可以透過類型安全的方法調用來進行此請求。 Refit通過抽象化管理HTTP客戶端相關的麻煩,是開發人員將API集成到.NET應用程式中更具生產力的全方位解決方案。

Refit C#(開發人員如何工作):圖1 - Refit:適用於.NET Core、Xamarin和.NET的自動類型安全REST庫

Features of Refit C#

類型安全的API可用性

Refit在編譯時檢測錯誤並確保方法簽名與API端點匹配。 這種類型安全降低了由不匹配的端點或不正確的請求配置引起的運行時錯誤的可能性。

HTTP客戶端聲明式

開發人員可以使用C#界面和屬性來構建API端點,從而生成更清晰、更可維護的HTTP請求代碼。 這種聲明式方法抽象化了為每個客戶端實現HTTP請求方法的複雜性。

自動序列化和反序列化

Refit自動處理C#對象到JSON數據的轉換。 由於開發人員不再需要手動序列化請求主體或反序列化回應,數據處理變得更加簡單。

基於屬性的配置

屬性用於定義HTTP方法(比如GET、POST、PUT和DELETE)和參數。 由於它包含標頭、請求主體、內容、路徑參數和查詢參數,因此使配置簡單且易於理解。

異步程式設計支援

Refit使用基於任務的方法來處理異步HTTP請求,並設計為能夠與.NET中的異步程式設計模型輕鬆互動。

可調適的Web瀏覽器

開發人員可以通過更改超時數字、默認標頭設置以及用於日誌記錄、身份驗證和重試策略的消息處理器配置來自定義核心HTTP客戶端。

集成的錯誤管理

Refit具有內置功能來處理HTTP問題,使開發人員可以輕鬆集成自己的自定義錯誤處理邏輯。

適應性

開發人員可以使用Refit對自定義序列化和反序列化轉換器的支援來利用多種格式或處理不尋常的數據類型。

結合依賴性注入整合

對於遵循依賴性注入(DI)推薦實踐的現代.NET應用程式來說,Refit適合在DI應用中整合。

驗證的協助

要保護API調用,Refit使配置認證標頭、界面方法如承載令牌和基本身份驗證變得簡單。

Create and Config Refit C#

可以按照以下步驟在C#中構建和設置Refit客戶端:

創建新的Visual Studio專案

使用Visual Studio建立Console專案很容易。 要在Visual Studio中創建Console應用程式,請按照下列步驟操作:

在使用Visual Studio之前,請確認已在您的電腦上安裝。

啟動新專案

打開Visual Studio,點擊"創建新專案"選項。

Refit C#(開發人員如何工作):圖2 - 在Visual Studio中,點擊

在"創建新專案"框的左側選擇您喜歡的程式設計語言(例如C#)。

從後續的專案範本參考列表中,您可以選擇"Console App"或"Console App (.NET Core)"模板。

給您的專案命名,並選擇專案的儲存位置。

Refit C#(開發人員如何工作):圖3 - 通過指定專案名稱、位置和解決方案名稱來配置您的Console App。 然後點擊下一步。

選擇適當的.NET Framework。 然後點擊"創建"以創建Console應用專案。

Refit C#(開發人員如何工作):圖4 - 選擇.NET Framework,然後點擊創建。 您的Console App專案將成功建立。

安裝Refit

首先必須在您的專案中包含Refit庫。 您可以使用NuGet包管理器安裝Refit NuGet包,或使用.NET CLI在Visual Studio中完成此操作。

使用.NET CLI進行安裝:

dotnet add package Refit
dotnet add package Refit
SHELL

定義API接口

創建一個介面來表示您的API。 使用Refit屬性定義HTTP方法和端點。

using Refit;
using System.Threading.Tasks;

// Define the API interface
public interface IMyApi
{
    // Get user details by ID
    [Get("/users/{id}")]
    Task<User> GetUserAsync(int id);

    // Create a new user
    [Post("/users")]
    Task<User> CreateUserAsync([Body] User user);
}

// Define the User class
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    // Other properties...
}
using Refit;
using System.Threading.Tasks;

// Define the API interface
public interface IMyApi
{
    // Get user details by ID
    [Get("/users/{id}")]
    Task<User> GetUserAsync(int id);

    // Create a new user
    [Post("/users")]
    Task<User> CreateUserAsync([Body] User user);
}

// Define the User class
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    // Other properties...
}
$vbLabelText   $csharpLabel

創建和配置Refit客戶端

啟動Refit客戶端並根據需要調整其設置。 這可以直接在您的主代碼中或在應用中的其他位置實施,例如服務。

using Refit;
using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main(string[] args)
    {
        // Define the base URL of your API
        var apiClient = RestService.For<IMyApi>("https://api.example.com");

        // Use the API client to make requests
        var user = await apiClient.GetUserAsync(1);
        Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}");

        // Create a new user
        var newUser = new User { Name = "John Doe" };
        var createdUser = await apiClient.CreateUserAsync(newUser);
        Console.WriteLine($"Created User ID: {createdUser.Id}, Name: {createdUser.Name}");
    }
}
using Refit;
using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main(string[] args)
    {
        // Define the base URL of your API
        var apiClient = RestService.For<IMyApi>("https://api.example.com");

        // Use the API client to make requests
        var user = await apiClient.GetUserAsync(1);
        Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}");

        // Create a new user
        var newUser = new User { Name = "John Doe" };
        var createdUser = await apiClient.CreateUserAsync(newUser);
        Console.WriteLine($"Created User ID: {createdUser.Id}, Name: {createdUser.Name}");
    }
}
$vbLabelText   $csharpLabel

進階配置

透過設置底層HttpClient,您可以進一步個性化Refit客戶端。 例如,您可以設置超時、應用標頭屬性、添加默認標頭或使用消息處理器進行重試策略、身份驗證和日誌記錄。

using System.Net.Http;
using Refit;
using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main(string[] args)
    {
        // Configure HttpClient with custom handler and timeout
        var httpClient = new HttpClient(new HttpClientHandler
        {
            // Customize the HttpClientHandler as needed
        })
        {
            BaseAddress = new Uri("https://api.example.com"),
            Timeout = TimeSpan.FromSeconds(30)
        };

        // Add default headers if needed
        httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN_HERE");

        // Create the Refit API client
        var apiClient = RestService.For<IMyApi>(httpClient);

        // Use the API client to make requests
        var user = await apiClient.GetUserAsync(1);
        Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}");

        // Create a new user
        var newUser = new User { Name = "John Doe" };
        var createdUser = await apiClient.CreateUserAsync(newUser);
        Console.WriteLine($"Created User ID: {createdUser.Id}, Name: {createdUser.Name}");
    }
}
using System.Net.Http;
using Refit;
using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main(string[] args)
    {
        // Configure HttpClient with custom handler and timeout
        var httpClient = new HttpClient(new HttpClientHandler
        {
            // Customize the HttpClientHandler as needed
        })
        {
            BaseAddress = new Uri("https://api.example.com"),
            Timeout = TimeSpan.FromSeconds(30)
        };

        // Add default headers if needed
        httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN_HERE");

        // Create the Refit API client
        var apiClient = RestService.For<IMyApi>(httpClient);

        // Use the API client to make requests
        var user = await apiClient.GetUserAsync(1);
        Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}");

        // Create a new user
        var newUser = new User { Name = "John Doe" };
        var createdUser = await apiClient.CreateUserAsync(newUser);
        Console.WriteLine($"Created User ID: {createdUser.Id}, Name: {createdUser.Name}");
    }
}
$vbLabelText   $csharpLabel

您可以按照以下說明在C#中創建和配置Refit客戶端,從而使用類型安全且可維護的RESTful API消耗。

Refit C#(開發人員如何工作):圖5 - 控制台輸出

開始

在C#專案中集成Refit和IronPDF的第一步是安裝這兩個庫、使用Refit配置一個簡單的API客戶端以獲取數據,並使用IronPDF來基於該數據創建PDF。 下面是使其發生的步驟:

什麼是IronPDF?

IronPDF是一個功能豐富的程式庫,用於在.NET應用程式中處理PDF文件。 憑藉其廣泛的功能集,使用者可以從頭開始創建PDF或根據HTML內容創建PDF,還可以通過添加、刪除或修改部分內容來更改現有的PDF文件。 IronPDF為開發人員提供了一個強大的API來創建、修改和轉換PDF文件,使處理.NET應用程式中的PDF文件變得更加容易。

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");
    }
}
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");
    }
}
$vbLabelText   $csharpLabel

Refit C#(開發人員如何工作):圖6 - IronPDF for .NET:C# PDF程式庫

IronPDF的主要功能

將HTML轉換為PDF

IronPDF允許使用您可以使用HTML內容創建高品質的PDF文檔,包括CSS和JavaScript。 此功能非常有用,適用於從動態內容或網頁創建PDF。

編輯和操作PDFs

IronPDF提供了現有PDF文檔的修改工具。可以從PDF中提取頁面、添加文字、圖像、水印或註釋,並將多個PDF合併成一個文檔。

從頭開始創建PDF

使用IronPDF的API,您可以程式化地向新的PDF文檔中添加文字、圖像、形狀和其他對象。 這使得動態生成PDF發票、報告和其他基於文檔的輸出成為可能。

PDF的安全性

您可以使用IronPDF加密PDF文件並添加密碼保護來管理訪問和保護重要數據。

PDF的表單

用戶可以透過將數據放入表單字段來與PDF文檔互動,從而使用IronPDF創建和填寫PDF表單。

文字提取

IronPDF透過從PDF文檔中提取文字內容,方便的進行文字數據的簡單搜索、分析和操作。

轉換為圖片格式

IronPDF適用於需要圖像而非PDF情況,因為它可以將PDF文檔轉換成常見的圖像格式,包括PNG、JPEG和BMP。

安裝 IronPDF

使用.NET CLI或NuGet包管理器將IronPDF添加到您的.NET專案中。

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Integrate IronPDF With Refit C#

讓我們分析一個將Refit與IronPDF結合的C#代碼範例。 在這個範例中,我們將使用Refit從一個虛構的RESTful API中檢索數據,並使用IronPDF基於該數據創建一個PDF文檔。 以下代碼的運行方式:

using System;
using System.Threading.Tasks;
using IronPdf;
using Refit;

public class Program
{
    public static async Task Main(string[] args)
    {
        // Define the base URL of your API
        var apiClient = RestService.For<IMyApi>("https://api.example.com");

        try
        {
            // Use the API client to make requests
            var user = await apiClient.GetUserAsync(1);

            // Generate PDF with the retrieved user data
            GeneratePdf(user);
            Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}");

            // Create a new user
            var rand = new Random();
            var newUser = new User { Id = rand.Next(), Name = "John Doe" };
            var createdUser = await apiClient.CreateUserAsync(newUser);
            Console.WriteLine($"Created User ID: {createdUser.Id}, Name: {createdUser.Name}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }

    // Generate a PDF from user data
    public static void GeneratePdf(User user)
    {
        // Construct HTML content for the PDF
        var htmlContent = $@"
        <html>
            <head>
                <style>
                    body {{ font-family: Arial, sans-serif; }}
                    h1 {{ color: navy; }}
                    p {{ font-size: 14px; }}
                </style>
            </head>
            <body>
                <h1>User Details</h1>
                <p><strong>ID:</strong> {user.Id}</p>
                <p><strong>Name:</strong> {user.Name}</p>
            </body>
        </html>";

        // Create an IronPDF ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF to a file
        var filePath = "UserDetails.pdf";
        pdfDocument.SaveAs(filePath);
        Console.WriteLine($"PDF generated and saved to {filePath}");
    }
}
using System;
using System.Threading.Tasks;
using IronPdf;
using Refit;

public class Program
{
    public static async Task Main(string[] args)
    {
        // Define the base URL of your API
        var apiClient = RestService.For<IMyApi>("https://api.example.com");

        try
        {
            // Use the API client to make requests
            var user = await apiClient.GetUserAsync(1);

            // Generate PDF with the retrieved user data
            GeneratePdf(user);
            Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}");

            // Create a new user
            var rand = new Random();
            var newUser = new User { Id = rand.Next(), Name = "John Doe" };
            var createdUser = await apiClient.CreateUserAsync(newUser);
            Console.WriteLine($"Created User ID: {createdUser.Id}, Name: {createdUser.Name}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }

    // Generate a PDF from user data
    public static void GeneratePdf(User user)
    {
        // Construct HTML content for the PDF
        var htmlContent = $@"
        <html>
            <head>
                <style>
                    body {{ font-family: Arial, sans-serif; }}
                    h1 {{ color: navy; }}
                    p {{ font-size: 14px; }}
                </style>
            </head>
            <body>
                <h1>User Details</h1>
                <p><strong>ID:</strong> {user.Id}</p>
                <p><strong>Name:</strong> {user.Name}</p>
            </body>
        </html>";

        // Create an IronPDF ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF to a file
        var filePath = "UserDetails.pdf";
        pdfDocument.SaveAs(filePath);
        Console.WriteLine($"PDF generated and saved to {filePath}");
    }
}
$vbLabelText   $csharpLabel

使用Refit屬性,我們構建了一個名為IMyApi的API介面,並提供用戶數據獲取的端點。 我們為API構建了一個Refit客戶端,並在Main函數中異步檢索用戶數據。 如果成功檢索到數據,則用戶對象將被傳遞給GeneratePdf方法。 使用IronPDF的ChromePdfRenderer類,我們在GeneratePdf方法中創建代表用戶詳細信息的HTML內容轉換為PDF文本,然後將其輸出為PDF文檔。 之後,創建的PDF被存儲在磁片文件中。

Refit C#(開發人員如何工作):圖7 - 控制台輸出

下面是生成的PDF文件的截圖。

Refit C#(開發人員如何工作):圖8 - 使用IronPDF生成的輸出PDF

結論

總結來說,對於使用RESTful API和PDF生成的開發人員來說,RefitIronPDF結合在C#中是一個強大而有效的解決方案。 Refit介面減少了樣板代碼,提高了可維護性,並提供類型安全的聲明式方法,使API使用變得更容易。然而,IronPDF提供了一個豐富的工具集合,用於生成、修改和處理PDF文檔,這使得從HTML文本中創建高品質PDF變得簡單。

透過整合這兩個工具,開發人員可以輕鬆地使用Refit從API中檢索數據,並藉由IronPDF創建基於該數據的動態PDF文檔。 這種整合簡化了工作流程,並創造了大量機會來生成動態的、數據驅動的PDF報告、發票和其他基於文檔的輸出。

您可以將IronPDF和其他Iron Software Technologies納入您的企業應用開發堆中,以為客戶和最終用戶提供功能豐富的高端軟體解決方案。 這種堅實的基礎也將使有關項目、後端系統和流程改進變得更加容易。

開發人員可以充分利用免費試用 IronPDF的$799成本。 由於其全面的文件、活躍的線上開發者社群和定期更新,這些技術是現代軟體開發專案的極佳選擇。

要了解更多關於如何開始使用IronPDF的資訊,請訪問HTML轉PDF的代碼範例完整文件

常見問題解答

Refit 如何簡化 .NET 中的 RESTful API 互動?

Refit 通過允許開發者使用 C# 屬性定義 API 介面,簡化了 RESTful API 互動。它自動生成必要的 HTTP 請求並確保類型安全的 API 訪問,從而減少樣板代碼並增強可維護性。

IronPDF 處理 PDF 文件的主要功能是什麼?

IronPDF 提供了廣泛的功能來處理 PDF 文件,包括合併、註解以及將 HTML 內容轉換為 PDF。它也支持從頭開始創建 PDF、修改現有的 PDF,並包括如 PDF 安全性、表單處理和文本提取等功能。

IronPDF 如何將 HTML 內容轉換為 PDF?

IronPDF 可以通過保留原始佈局和樣式來將 HTML 內容轉換為 PDF。這對從網頁或動態內容生成高質量的 PDF 十分有用,使用 HTML、CSS 和 JavaScript。

Refit 和 IronPDF 可以整合用於數據驅動的 PDF 生成嗎?

可以,Refit 和 IronPDF 可以集成用來有效地從 API 獲取數據並基於該數據生成高質量的 PDF 報告。這種集成精簡了創建動態、數據驅動 PDF 文件(如報告和發票)的工作流程。

在 C# 中將 Refit 與 PDF 庫集成的優勢是什麼?

將 Refit 與像 IronPDF 這樣的 PDF 庫在 C# 中集成,有助於簡化從 RESTful API 的數據檢索和 PDF 生成的過程。它確保了對動態數據和展示的高效處理,對於現代軟件開發項目來說非常理想。

如何在 .NET 項目中開始使用 Refit?

要在 .NET 項目中開始使用 Refit,您可以通過 NuGet 包管理器安裝它。它允許您使用 C# 屬性定義 API 介面,自動生成 HTTP 客戶端代碼以實現無縫的 API 互動。

使用 Refit 的一些常見故障排除技巧是什麼?

在對 Refit 進行故障排除時,確保您的 API 介面定義符合端點規範,並正確定義了您的請求和響應數據類型。同時,檢查是否有任何網路連接問題並確保 API 端點可訪問。

IronPDF 如何確保高質量的 PDF 輸出?

IronPDF 通過準確呈現 HTML 內容(包括 CSS 和 JavaScript)到 PDF 中,來確保高質量的 PDF 輸出,同時保持原始佈局和樣式。這種能力對於需要精確 PDF 文件格式的應用至關重要。

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

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me