Flurl C# (對開發者如何運作)
在C#開發中,整合強大的程式庫可以顯著提高產出和容量。 兩個相得益彰的程式庫是Flurl和IronPDF,它們分別為程式設計師提供了強大工具來建立PDF和與線上API互動。
Flurl提供了一種流暢、表達力強的語法,使得在C#中處理HTTP請求、API及其API端點更加容易。 發送HTTP請求、響應及管理查詢參數或標頭只是它簡化的幾個任務。 開發者可以使用Flurl快速高效地管理身份驗證、序列化和反序列化JSON,以及消費網路API——同時撰寫可讀性和組織良好的程式碼。
開發者可以利用Flurl的易用性和多功能性,結合IronPDF,通過與網路API連接、檢索資料,輕鬆將其整合到IronPDF中來建立詳細且準備充分的PDF文件。 通過這種整合,程式設計師可以設計複雜的應用程式,通過自動化利用從線上服務獲取的實時資料建立文件,以提高生產力和使用者體驗。
在這個介紹中,我們將看看如何在C#程式中使用和結合Flurl和IronPDF,強調它們在現代程式開發中的優勢及協作潛力。
什麼是Flurl C#?
Flurl是一個強大且易於使用的C#程式庫,用於管理HTTP請求和與線上API通訊。它提供了一種流暢、可連結的語法,提高了程式碼可讀性和可維護性,並簡化了與RESTful API的互動。開發者可以輕鬆地建立和提交HTTP請求,以易於理解的方式處理響應,並管理查詢參數、標頭和有效負載。
Flurl最顯著的特徵之一在於其動態構建URL的能力,這使得根據運行時情況來建立和更改URL變得簡單,也可以作為一個獨立的URL建構器使用。 它提供了強大的支持來管理JSON資料的序列化和反序列化,並支持流行的HTTP功能,如GET、POST、PUT、DELETE等。此外,Flurl具有內建的功能來管理表單資料和查詢參數,這使其適合於各種API整合場景。
Fluent Interface
Flurl提供的流暢的、可連結的語法增強了程式的可讀性和可維護性。 開發者可以建立簡單而富有表達力的HTTP請求,並處理URLs、查詢參數、標頭和有效負載。
HTTP Method Support
支持所有標準的HTTP方法,包括GET、POST、PUT、DELETE、PATCH、HEAD和OPTIONS。 由於這種全面的支持方法,使得開發者在工作於網路API時可以完成各種任務。
Query Parameter Handling
Flurl提供了輕鬆的方法來修改、新增和刪除URL中的查詢參數。 這使得根據使用者輸入或運行時情況建立動態URL變得更加容易。
JSON Support
Flurl原生支持JSON資料處理。 它可以輕鬆地將JSON響應反序列化為C#物件,並將物件序列化為JSON以供請求有效負載使用。 由於這一點,使用基於JSON的API變得簡單而容易。
Form Data and Multipart Support
它使得管理multipart請求和表單資料變得更加容易。 Flurl使開發者可以輕鬆地在HTTP請求中包含multipart/form-data有效負載或表單編碼資料。
Error Handling and Retry Policies
Flurl提供所有HTTP調用的重試策略定義和錯誤處理功能。 通過定義唯一的錯誤處理邏輯或重試技術,開發者可以增強API調用和交互的彈性和可靠性。 這也保護並幫助開發者預防響應中的匿名物件錯誤。
Authentication
它支持多種流行的Web API身份驗證方法,包括OAuth、自定義身份驗證方案、Basic Authentication和API金鑰。 這確保了與需要身份驗證的API之間的安全通訊。
Testing Support
通過將HTTP相關邏輯隔離到可重用的組件中,配合明確的關注點分離,Flurl鼓勵了可測試性。 這使得編寫API交互的單元測試變得簡單,無需進行實際的網路呼叫來測試它們。
Configuration Flexibility
它為HTTP客戶端和請求參數提供配置靈活性。 開發者可以更改客戶端行為、超時、錯誤響應量、標頭和其他設置,以滿足特定應用程式或API限制的需求。
可擴展性
由於其插件框架,Flurl非常易於擴展。 開發者可以通過構建獨特的擴展或整合第三方插件以獲得更多功能來提高平台的功能。
Create and configure Flurl C#
以下是為C#專案構建和配置Flurl的步驟:
建立新的Visual Studio專案
使用Visual Studio建立控制台專案很容易。 要在Visual Studio環境中啟動控制應用程式,請按照以下簡單步驟操作:
在嘗試使用前,請確保您的電腦上安裝了Visual Studio。
開始一個新項目
選擇"檔案"、"專案",然後選擇"新建"選項。
⟨IMG⟩Flurl C#(如何為開發者工作): 圖1 - 單擊新建選項⟨/IMG⟩
可以從下面的專案範本參考列表中選擇"控制台應用程式"或"控制台應用程式(.NET Core)"範本。
請填寫"名稱"表單以命名您的專案。
⟨IMG⟩Flurl C#(如何為開發者工作): 圖2 - 提供名稱和位置⟨/IMG⟩
選擇一個地方來保存專案。
點擊"建立"將打開控制台應用程式專案。

安裝Flurl.Http包
首先安裝Flurl.Http包,使用NuGet包管理器控制台或Visual Studio中的NuGet包管理器
建立FlurlClient配置
Flurl提供FlurlClient類別,使您可以設置使用URL構建器的每個HTTP請求的預設參數。 這個可選但有用的步驟可以通過設置基本URL或預設標頭來完成。
using Flurl;
using Flurl.Http;
// Configure a FlurlClient instance with base URL and headers
FlurlClient flurlClient = new FlurlClient("https://api.example.com/");
flurlClient.WithHeader("Authorization", "Bearer YourAccessTokenHere");Imports Flurl
Imports Flurl.Http
' Configure a FlurlClient instance with base URL and headers
Private flurlClient As New FlurlClient("https://api.example.com/")
flurlClient.WithHeader("Authorization", "Bearer YourAccessTokenHere")Imports Flurl
Imports Flurl.Http
' Configure a FlurlClient instance with base URL and headers
Private flurlClient As New FlurlClient("https://api.example.com/")
flurlClient.WithHeader("Authorization", "Bearer YourAccessTokenHere")發送HTTP請求
您現在可以使用Flurl的流暢URL發送HTTP請求。
var response = await "http://localhost:5013/users".GetAsync();
Console.WriteLine(response.ToString());
if (response.ResponseMessage.IsSuccessStatusCode)
{
var result = await response.ResponseMessage.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
else
{
Console.WriteLine($"Error: {response.StatusCode}");
}var response = await "http://localhost:5013/users".GetAsync();
Console.WriteLine(response.ToString());
if (response.ResponseMessage.IsSuccessStatusCode)
{
var result = await response.ResponseMessage.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
else
{
Console.WriteLine($"Error: {response.StatusCode}");
}Dim response = await "http://localhost:5013/users".GetAsync()
Console.WriteLine(response.ToString())
If response.ResponseMessage.IsSuccessStatusCode Then
Dim result = Await response.ResponseMessage.Content.ReadAsStringAsync()
Console.WriteLine(result)
Else
Console.WriteLine($"Error: {response.StatusCode}")
End IfDim response = await "http://localhost:5013/users".GetAsync()
Console.WriteLine(response.ToString())
If response.ResponseMessage.IsSuccessStatusCode Then
Dim result = Await response.ResponseMessage.Content.ReadAsStringAsync()
Console.WriteLine(result)
Else
Console.WriteLine($"Error: {response.StatusCode}")
End If⟨IMG⟩Flurl C# (How It Works For Developers): 圖4 - 範例控制台輸出⟨/IMG⟩
處理響應
為了根據預期格式(如JSON、字串等)管理響應內容,Flurl的HttpResponseMessageExtensions提供了擴展方法,如ReceiveJson和ReceiveString。
// Handling JSON response
var responseObject = await "https://api.example.com/resource"
.WithClient(flurlClient)
.GetJsonAsync<ResponseType>();
// Assuming ResponseType is a class representing the expected JSON structure
Console.WriteLine($"Response: {responseObject.Property}");// Handling JSON response
var responseObject = await "https://api.example.com/resource"
.WithClient(flurlClient)
.GetJsonAsync<ResponseType>();
// Assuming ResponseType is a class representing the expected JSON structure
Console.WriteLine($"Response: {responseObject.Property}");Imports System
Imports Flurl.Http
' Handling JSON response
Dim responseObject As ResponseType = Await "https://api.example.com/resource" _
.WithClient(flurlClient) _
.GetJsonAsync(Of ResponseType)()
' Assuming ResponseType is a class representing the expected JSON structure
Console.WriteLine($"Response: {responseObject.Property}")Imports System
Imports Flurl.Http
' Handling JSON response
Dim responseObject As ResponseType = Await "https://api.example.com/resource" _
.WithClient(flurlClient) _
.GetJsonAsync(Of ResponseType)()
' Assuming ResponseType is a class representing the expected JSON structure
Console.WriteLine($"Response: {responseObject.Property}")額外配置
-
查詢參數: 要新增查詢參數,請使用
.SetQueryParams()方法。 確保每個請求都使用相同的HttpClient實例運行,以提高效率。 -
超時: 例如,您可以使用
.WithTimeout(TimeSpan.FromSeconds(30))設置超時。 -
錯誤處理: 要處理特定的錯誤情況,請使用
.OnError()。
入門
當需要從遠程API檢索資料並使用該資料建立PDF文件時,將Flurl與IronPDF整合到C#專案中是很有幫助的。 要開始使用Flurl和IronPDF,請按照以下步驟進行:
什麼是IronPDF?
一個功能豐富的.NET程式庫IronPDF可在C#程式中使用來建立、閱讀和修改PDF文件。 借助此工具,開發者可以快速從HTML、CSS和JavaScript內容生成可列印的高質量PDF。 一些基本功能包括給能水印、製作頁眉和頁腳、拆分和合併PDF以及將HTML轉換為PDF的能力。 IronPDF 支持.NET Framework 和.NET Core,使其適用於多種應用程式。
由於PDF易於整合且有豐富的詳細文件,開發者可以輕鬆地將其應用在其應用程式中。 IronPDF通過高效處理複雜的佈局和樣式確保生成的PDF與源HTML內容緊密相似。
IronPDF使轉換網頁、URLs和HTML為看起來與原始內容完全相同的高質量PDF變得非常簡單。 這非常適合用來建立在線報告、發票等的PDF。 如果您一直在尋找將HTML轉換為PDF的方法,那麼IronPDF可以滿足您的需求!
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");
}
}Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End ClassImports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class⟨IMG⟩Flurl C#(如何為開發者工作):圖5 - IronPDF:C# PDF程式庫⟨/IMG⟩
IronPDF的功能
從HTML生成PDF
將JavaScript、HTML和CSS轉換為PDF。 它支持媒體查詢和響應式設計,這是兩個現代網路標準。 此功能適用於使用HTML和CSS動態裝飾PDF報告、發票和文件。
PDF編輯
可以將文字、照片和其他內容新增到現有PDF中。 可以從PDF文件中刪除文字和圖片。 多個PDF可以合併到一個文件中。PDF文件可以分成多個不同文件。 可以包含水印、註釋、頁眉和頁腳。
PDF轉換
將幾種文件型別,包括Word、Excel和圖片文件,轉換為PDF格式。 PDF轉換為影像(PNG、JPEG等)。
性能和可靠性
高效能和可靠性是在工業設定中有望的設計特性,因為它們可以有效地管理大量文件集合。
安裝IronPDF
要獲取在.NET專案中工作的PDF工具,請安裝IronPDF包。
使用Flurl獲取資料生成PDF
使用Flurl的流暢API發送HTTP查詢並從您的API獲取資料。 這是檢索JSON資料的一個實例:
using Flurl;
using Flurl.Http;
using IronPdf;
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
try
{
var response = await "http://localhost:5013/users/1".GetJsonAsync<User>();
var id = response?.Id;
var name = response?.Name;
Console.WriteLine($"Data fetched successfully: {name}");
// Generate PDF using IronPDF
var renderer = new ChromePdfRenderer();
string htmlTemplate = $@"
<html>
<body>
<h1>{id}</h1>
<p>{name}</p>
</body>
</html>";
// Generate PDF document from HTML template
var pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate);
// Save or stream the PDF document
pdfDocument.SaveAs(@"document.pdf");
Console.WriteLine("PDF document generated successfully.");
}
catch (FlurlHttpException ex)
{
Console.WriteLine($"HTTP Error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
// Example model class for JSON deserialization
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}using Flurl;
using Flurl.Http;
using IronPdf;
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
try
{
var response = await "http://localhost:5013/users/1".GetJsonAsync<User>();
var id = response?.Id;
var name = response?.Name;
Console.WriteLine($"Data fetched successfully: {name}");
// Generate PDF using IronPDF
var renderer = new ChromePdfRenderer();
string htmlTemplate = $@"
<html>
<body>
<h1>{id}</h1>
<p>{name}</p>
</body>
</html>";
// Generate PDF document from HTML template
var pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate);
// Save or stream the PDF document
pdfDocument.SaveAs(@"document.pdf");
Console.WriteLine("PDF document generated successfully.");
}
catch (FlurlHttpException ex)
{
Console.WriteLine($"HTTP Error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
// Example model class for JSON deserialization
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}Imports Flurl
Imports Flurl.Http
Imports IronPdf
Imports System
Imports System.Threading.Tasks
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Try
Dim response = await "http://localhost:5013/users/1".GetJsonAsync(Of User)()
Dim id = response?.Id
Dim name = response?.Name
Console.WriteLine($"Data fetched successfully: {name}")
' Generate PDF using IronPDF
Dim renderer = New ChromePdfRenderer()
Dim htmlTemplate As String = $"
<html>
<body>
<h1>{id}</h1>
<p>{name}</p>
</body>
</html>"
' Generate PDF document from HTML template
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate)
' Save or stream the PDF document
pdfDocument.SaveAs("document.pdf")
Console.WriteLine("PDF document generated successfully.")
Catch ex As FlurlHttpException
Console.WriteLine($"HTTP Error: {ex.Message}")
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
End Try
End Function
End Class
' Example model class for JSON deserialization
Public Class User
Public Property Id() As Integer
Public Property Name() As String
End ClassImports Flurl
Imports Flurl.Http
Imports IronPdf
Imports System
Imports System.Threading.Tasks
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Try
Dim response = await "http://localhost:5013/users/1".GetJsonAsync(Of User)()
Dim id = response?.Id
Dim name = response?.Name
Console.WriteLine($"Data fetched successfully: {name}")
' Generate PDF using IronPDF
Dim renderer = New ChromePdfRenderer()
Dim htmlTemplate As String = $"
<html>
<body>
<h1>{id}</h1>
<p>{name}</p>
</body>
</html>"
' Generate PDF document from HTML template
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate)
' Save or stream the PDF document
pdfDocument.SaveAs("document.pdf")
Console.WriteLine("PDF document generated successfully.")
Catch ex As FlurlHttpException
Console.WriteLine($"HTTP Error: {ex.Message}")
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
End Try
End Function
End Class
' Example model class for JSON deserialization
Public Class User
Public Property Id() As Integer
Public Property Name() As String
End Class在此範例中,Flurl的.GetJsonAsync()函式用於發送GET請求並獲取JSON資料。 用您的模型類代替User,它代表API響應結構,並用您的實際API端點替換"URL"。 HTML模版(ChromePdfRenderer類轉換成PDF檔案。 在此處,從API檢索的標題和正文資料用於動態構建HTML模板。 所建立的PDF文件(pdfDocument)保存到文件系統中指定的位置("document.pdf")。 根據需要修改路徑。
⟨IMG⟩Flurl C#(如何為開發者工作):圖6 - 範例控制臺輸出⟨/IMG⟩
為資料提取或PDF生成期間的網路故障(Exception)提供強大的錯誤處理。 您可以使用IronPDF更改頁面大小、邊距、頁眉、頁腳和其他PDF設置。 有關更高級的自定義可能性,請參考IronPDF的唯美手冊。 在向API發送HTTP查詢時,請確保機密資料和存取令牌得到安全處理。 使用您的API所需的正確身份驗證方法。
結論
總之,將IronPDF用於PDF生成與Flurl用於API互動相結合於C#應用程式中,提供了一個強大的組合,可動態檢索資料並生成高質量的PDF文件。 Flurl程式庫具有流暢的API,簡化了HTTP請求,並在從遠程端點檢索資料時提供靈活性和友好性。 此外,IronPDF促進了HTML資料到PDF格式的輕鬆轉換,提供了可調整的功能,如頁眉、邊距和頁面大小。
在實施這種整合時,還需要考慮速度優化、資料安全性和錯誤處理問題。 通過遵循最佳實踐並利用Flurl和IronPDF的優勢,開發者可以建立可靠且可擴展的解決方案,以成功滿足現代應用程式的需求。
IronPDF和Iron Software's Suite提供了額外的線上應用程式和功能,通過結合Iron Software高度靈活的系統和套件以及其核心支持,提高了開發效率。
如果授權選擇對專案的需求清晰明確,開發者更容易確定哪種模式是理想且最佳的實踐。這些優點使開發者能夠以清晰、具吸引力且無縫整合的方式管理各種問題。
Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。