Flurl C#(开发者用法)
在C#开发中,强大的库可以显著提高输出和能力。 两个可以很好协作的库是Flurl和IronPDF,它们分别为程序员提供了创建PDF和与在线API交互的强大工具。
Flurl提供了一种流畅且富有表现力的语法,使在C#中处理HTTP请求、API及其API端点变得更容易。 发送HTTP请求、响应这些请求以及管理查询参数或头信息是它简化的任务之一。 开发人员可以使用Flurl快速有效地管理身份验证、进行JSON序列化和反序列化,并消费Web API——同时编写易读且组织良好的代码。
开发人员可以利用Flurl的易用性和多功能性,与IronPDF结合使用,通过连接web 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集成场景。
流畅接口
Flurl提供的流畅、可链式语法增强了程序的可读性和可维护性。 开发人员可以创建简单且富有表现力的HTTP请求,并使用URL、查询参数、头信息和有效负载。
HTTP方法支持
支持所有标准的HTTP方法,包括GET、POST、PUT、DELETE、PATCH、HEAD和OPTIONS。 由于这种全面的支持方案,开发人员在处理Web API时可以完成各种任务。
查询参数处理
Flurl提供简便的方法来修改、添加和移除URL中的查询参数。 这使得基于用户输入或运行时情况创建动态URL变得更容易。
JSON支持
Flurl本身支持JSON数据处理。 它可以轻松地将JSON响应反序列化为C#对象,并将对象序列化为请求负载的JSON。 因此,使用基于JSON的API既简单又便捷。
表单数据和多部分支持
它简化了多部分请求和表单数据的管理。 Flurl使得开发人员可以轻松地在HTTP请求中包含多部分/表单数据或表单编码的数据。
错误处理和重试策略
Flurl为所有HTTP调用提供重试策略定义和错误处理能力。 通过定义独特的错误处理逻辑或重试技术,开发人员可以增强API调用和交互的弹性和可靠性。 这还可以保护并帮助开发人员在响应中防止匿名对象错误。
身份验证
它支持多种流行的Web API身份验证方法,包括OAuth、自定义身份验证方案、基本身份验证和API密钥。 这确保了与需要身份验证的API进行安全通信。
测试支持
通过将HTTP相关逻辑隔离到具有不同关注点分离的可重用组件中,Flurl促进了可测试性。 这使得为API交互编写单元测试更简单,因为不需要进行实际网络调用来测试它们。
配置灵活性
它为HTTP客户端和请求参数提供配置灵活性。 开发人员可以更改客户端行为、超时、错误响应量、头信息和其他设置,以满足特定应用程序或API限制的需求。
可扩展性
由于其插件框架,Flurl非常可扩展。 开发人员可以通过构建自定义扩展或集成第三方插件来增加平台功能以获得更多功能。
Create and configure Flurl C#
以下是构建和配置C#项目中的Flurl的步骤:
创建一个新的Visual Studio项目
using Visual Studio 创建一个控制台项目很容易。 要在Visual Studio环境中启动一个控制台应用程序,请按照以下简单步骤操作:
在尝试使用之前,请确保计算机上已安装Visual Studio。
启动新项目
选择文件、项目,然后选择新建选项。

可以从下面的项目模板引用列表中选择"控制台应用程序"或"控制台应用程序(.NET Core)"模板。
请填写"名称"表单,以便为项目命名。

选择存放项目的位置。
点击"创建"将打开控制台应用项目。

安装Flurl.Http包
第一步是使用NuGet包管理器控制台或Visual Studio中的NuGet包管理器来安装Flurl.Http包。
创建一个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
处理响应
为了管理根据预期格式(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?
名为IronPDF的功能丰富的.NET库可用于C#程序中创建、读取和修改PDF文档。 借助此工具,开发人员可以快速从HTML、CSS和JavaScript内容生成可打印的高质量PDF。 一些基本功能包括水印功能、创建页眉和页脚、拆分和合并PDF以及将HTML转换为PDF的能力。 IronPDF支持.NET Framework和.NET Core,使其适用于各种应用程序。
由于PDF易于集成并拥有丰富的详细文档,开发人员可以轻松地在他们的应用程序中使用它们。 IronPDF通过高效处理复杂的布局和样式,确保生成的PDF与源HTML内容相近。
IronPDF使将网页、URL及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
IronPDF的功能
从HTML生成PDF
将JavaScript、HTML和CSS转换为PDF。 支持媒体查询和响应式设计,这两个是现代的网络标准。 在动态装饰PDF报告、发票和文件时使用HTML和CSS非常有用。
PDF编辑
可以添加文本、图片和其他内容到已有的PDF中。 可以从PDF文件中删除文本和图片。 能将多个PDF合并成一个文件。可以将PDF文件分成多个独立的文档。 可以加入水印、注释、页眉和页脚。
PDF转换
将多种文件类型,包括Word、Excel和图片文件,转换为PDF格式。 PDF到图像转换(PNG、JPEG等)。
性能和可靠性
在工业环境中,高性能和高可靠性是期望的设计品质,因为它们可以有效地管理多重文档。
安装IronPDF
为了在.NET项目中获得处理PDF所需的工具,请安装IronPDF包。
使用Flurl获取数据生成PDF
为了使用Flurl的流畅API向您的API发起HTTP查询并获取数据。 这是一个获取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数据。 用表示API响应结构的模型类替换User,并将"URL"替换为您的实际API端点。 使用IronPDF的htmlTemplate)渲染成PDF文档。 在这里,从API获取的标题和正文数据用于动态构建HTML模板。 创建的PDF文档(pdfDocument)会保存到文件系统的指定位置("document.pdf")。 根据需要修改路径。

为网络故障(Exception)提供强大的错误处理。 您可以使用IronPDF更改页面大小、边距、页眉、页脚及其他PDF设置。 有关更高级自定义选项,请参见IronPDF的方式手册。 在向API发送HTTP查询时,请确保安全地处理敏感数据和访问令牌。 使用您的API所需的正确身份验证方法。
结论
综上所述,将IronPDF用于PDF生成与Flurl用于API交互结合在C#应用程序中提供了一种强大的组合,能够动态检索数据并生成高质量的PDF文档。 通过其流畅的API,Flurl库精简了HTTP请求,并在从远程端点获取数据时提供灵活性和用户友好性。 此外,IronPDF还促进了HTML内容向PDF格式的简易转化,提供了页眉、边距、页面大小等可调节的特性。
在实现此集成方案时,还需要考虑速度优化、数据安全性和错误处理。 通过遵循最佳实践并利用Flurl和IronPDF的优势,开发人员可以创建可靠且可扩展的解决方案,成功满足现代应用的需求。
IronPDF和Iron Software的套件通过结合Iron Software高度灵活的系统和套件及其核心支持,提供额外的在线应用和功能以及更高效的开发。
如果许可选择明确且具体到项目需求,开发人员就更能判断哪种模式是理想且最佳实践。这些好处可以让开发人员以清晰、有说服力的和无缝集成的方式来处理各种问题。
Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。