使用IRONPDF 如何在C#中使用Fluent Validation与IronPDF Curtis Chau 已更新:七月 28, 2025 Download IronPDF NuGet 下载 DLL 下载 Windows 安装程序 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 什么是Fluent Validation? FluentValidation是一个.NET验证库,帮助构建强类型的验证规则。 它使用流畅的接口和lambda表达式,使代码更具可读性和可维护性。 比起在模型类中使用数据注解或手动验证,您可以使用Fluent Validation为验证逻辑构建单独的类。 Fluent Validation为验证过程带来了更大的灵活性。 凭借内置的常见场景验证器、构建自定义验证的能力和简易的验证规则链方式,Fluent Validation是.NET Core工具包中强大的工具。 理解Fluent Validation Fluent Validation是一个.NET的开源库,使为模型类构建验证规则变得简单。 验证器:验证器是封装验证逻辑的类。 它们通常通过继承AbstractValidator<T>基类创建。 规则:规则是属性必须满足的验证条件。 规则是使用验证器类中的RuleFor方法定义的。 验证失败:如果规则失败,Fluent Validation会创建一个ValidationFailure对象,包含关于错误的详细信息,包括属性名称和错误消息。 什么是 IronPDF? [IronPDF - 在C#中将HTML转换为PDF](/)是一个强大的.NET库,允许您从HTML内容生成PDF文档。 无论您需要创建发票、报告或其他类型的文档,IronPDF都提供了一种易于使用的解决方案。 它无缝集成到ASP.NET Core应用程序中,使您可以仅用几行代码生成高质量的PDF文件。 ## 在IronPDF中使用Fluent Validation 现在我们了解了Fluent Validation和IronPDF是什么,我们来看一下它们如何一起使用。 本教程将帮助构建一个发票生成器,其中的发票内容将在使用IronPDF生成PDF之前在ASP.NET Core中使用FluentValidation进行验证。 ### 项目设置 首先,让我们在Visual Studio或您喜欢的开发环境中创建一个新的控制台应用程序。 1. 打开Visual Studio并转到**文件 > 新建 > 项目**。 2. 选择“控制台应用程序(ASP.NET Core)”作为项目模板,并为您的项目提供一个名称。  **创建新的控制台应用程序** 3. 点击**下一步**按钮,并通过命名并选择存储库位置来配置您的项目。  **配置新应用程序** 4. 点击**下一步**按钮并选择.NET Framework。 推荐使用最新的.NET Framework(7)。  **.NET Framework选择** 5. 点击**创建**按钮以创建项目。 ### 安装所需的包 项目创建完成后,添加Fluent Validation和IronPDF所需的NuGet包。 1. 右键点击解决方案资源管理器中的项目并选择“管理NuGet包”。 2. 搜索“FluentValidation”并点击“安装”以将包添加到您的项目中。  **在NuGet包管理器UI中安装FluentValidation包** 3. 同样,搜索“[IronPDF - 强大的.NET PDF库](/)”并安装IronPDF包。 或者,您可以使用**NuGet包管理器控制台**通过以下命令安装IronPDF: ```shell :ProductInstall ```  **在包管理器控制台中安装IronPdf包** 在设置好项目并安装所需包后,让我们继续定义PDF内容类。 ### 定义PDF内容 在这个例子中,将从两个类中的HTML代码中创建一个简单的发票PDF:`InvoiceContent`和`InvoiceItem`。 ```csharp using System.Collections.Generic; using System.Linq; public abstract class PdfContent { // Abstract method to generate the HTML string public abstract string RenderHtml(); } public class InvoiceContent : PdfContent { public string CustomerName { get; set; } public string Address { get; set; } public List InvoiceItems { get; set; } // Constructs the HTML representation of the invoice public override string RenderHtml() { string invoiceItemsHtml = string.Join("", InvoiceItems.Select(item => $"{item.Description}: {item.Price}")); return $"Invoice for {CustomerName}{Address}{invoiceItemsHtml}"; } } public class InvoiceItem { public string Description { get; set; } public decimal Price { get; set; } } ``` 在上面的代码中,定义了一个抽象的`PdfContent`类,其内部定义了一个抽象方法`RenderHtml`。 `InvoiceContent`类扩展了`PdfContent`,表示发票PDF的内容。 它具有客户姓名、地址和发票项目列表的属性。 `InvoiceItem`类包含两个属性:'Description'和'Price'。 `RenderHtml`方法根据内容生成发票的HTML标记。 既然PDF内容已定义,让我们继续使用Fluent Validation创建验证规则。 ### 创建验证规则 为`InvoiceContent`类构建验证规则,请创建一个名为`InvoiceContentValidator`的验证器类。 该类将继承自FluentValidation提供的`AbstractValidator`。 ```csharp using FluentValidation; public class InvoiceContentValidator : AbstractValidator { public InvoiceContentValidator() { RuleFor(content => content.CustomerName).NotEmpty().WithMessage("Customer name is required."); RuleFor(content => content.Address).NotEmpty().WithMessage("Address is required."); RuleFor(content => content.InvoiceItems).NotEmpty().WithMessage("At least one invoice item is required."); RuleForEach(content => content.InvoiceItems).SetValidator(new InvoiceItemValidator()); } } public class InvoiceItemValidator : AbstractValidator { public InvoiceItemValidator() { RuleFor(item => item.Description).NotEmpty().WithMessage("Description is required."); RuleFor(item => item.Price).GreaterThanOrEqualTo(0).WithMessage("Price must be greater than or equal to 0."); } } ``` 在源代码中,定义了一个`InvoiceContentValidator`类,该类继承自`AbstractValidator`。 在验证器类的构造函数中,`RuleFor`方法为`InvoiceContent`类的每个属性定义了验证规则。 例如,`RuleFor(content => content.CustomerName)`指定客户姓名不应为空。 类似地,为地址和发票项目属性定义了验证规则。 `RuleForEach`方法遍历`InvoiceItems`列表中的每个项目并应用`InvoiceItemValidator`。 `InvoiceItemValidator`类包含`InvoiceItem`类的验证规则。 随着这些验证规则的到位,让我们继续使用IronPDF生成PDF。 ### 使用IronPDF生成PDF [IronPDF - 生成和编辑PDF文档](/tutorials/html-to-pdf/)是一个流行的.NET库,用于创建和操作PDF文档。 IronPDF将用于基于经过验证的发票内容生成PDF。 ```csharp using IronPdf; using FluentValidation; public class PdfService { // Generates a PDF document for the provided content public PdfDocument GeneratePdf(T content) where T : PdfContent { // Validate the content using the appropriate validator var validator = GetValidatorForContent(content); var validationResult = validator.Validate(content); // Check if validation is successful if (!validationResult.IsValid) { throw new FluentValidation.ValidationException(validationResult.Errors); } // Generate the PDF using IronPDF var renderer = new ChromePdfRenderer(); return renderer.RenderHtmlAsPdf(content.RenderHtml()); } // Retrieves the appropriate validator for the content private IValidator GetValidatorForContent(T content) where T : PdfContent { if (content is InvoiceContent) { return (IValidator)new InvoiceContentValidator(); } else { throw new NotSupportedException("Unsupported content type."); } } } ``` `PdfService`类提供了一个`GeneratePdf`方法。 此方法接受一个`PdfContent`对象作为输入,并根据经过验证的内容生成PDF文档。 首先,通过调用`GetValidatorForContent`方法获取适用于内容的验证器,该方法检查内容类型并返回相应的验证器。 在我们的例子中,我们支持`InvoiceContent`并使用`InvoiceContentValidator`。 接下来,通过调用验证器的`Validate`方法对内容进行验证。 验证结果储存在一个`ValidationResult`对象中。 如果验证失败(`!validationResult.IsValid`),则会抛出带有验证错误的`FluentValidation.ValidationException`。 否则,使用IronPDF生成PDF。 创建< a href="/object-reference/api/IronPdf.ChromePdfRenderer.html">ChromePdfRenderer实例来将HTML内容渲染为PDF。 在`renderer`对象上调用< a href="/object-reference/api/IronPdf.ChromePdfRenderer.html# IronPdf_ChromePdfRenderer_RenderHtmlAsPdf_System_String_System_String_System_String_">RenderHtmlAsPdf方法,传入`content.RenderHtml`方法生成的HTML,从而生成PDF文档。 既然我们已经定义了PDF生成逻辑,让我们处理可能出现的任何验证错误。 ### 处理验证错误 当验证错误发生时,我们希望显示一个错误消息并优雅地处理它。 让我们修改`Program`类的`Main`方法来处理任何异常并向用户显示有意义的消息。 ```csharp using System; using System.Collections.Generic; public class Program { static void Main(string[] args) { var pdfService = new PdfService(); // Test 1: Empty Customer Name try { var invoiceContent = new InvoiceContent { CustomerName = "", Address = "123 Main St, Anytown, USA", InvoiceItems = new List { new InvoiceItem { Description = "Item 1", Price = 19.99M }, new InvoiceItem { Description = "Item 2", Price = 29.99M } } }; var pdfDocument = pdfService.GeneratePdf(invoiceContent); pdfDocument.SaveAs("C:\\TestInvoice.pdf"); Console.WriteLine("PDF generated successfully!"); } catch (Exception ex) { Console.WriteLine("Error generating PDF: " + ex.Message); } // Test 2: Empty InvoiceItems try { var invoiceContent = new InvoiceContent { CustomerName = "John Doe", Address = "123 Main St, Anytown, USA", InvoiceItems = new List() // Empty list }; var pdfDocument = pdfService.GeneratePdf(invoiceContent); pdfDocument.SaveAs("C:\\TestInvoice.pdf"); Console.WriteLine("PDF generated successfully!"); } catch (Exception ex) { Console.WriteLine("Error generating PDF: " + ex.Message); } // Successful generation try { var invoiceContent = new InvoiceContent { CustomerName = "John Doe", Address = "123 Main St, Anytown, USA", InvoiceItems = new List { new InvoiceItem { Description = "Item 1", Price = 19.99M }, new InvoiceItem { Description = "Item 2", Price = 29.99M } } }; var pdfDocument = pdfService.GeneratePdf(invoiceContent); pdfDocument.SaveAs("C:\\TestInvoice.pdf"); Console.WriteLine("PDF generated successfully!"); } catch (Exception ex) { Console.WriteLine("Error generating PDF: " + ex.Message); } } } ``` 在上面的代码中,使用`try-catch`块捕获可能发生的任何异常。 如果捕获到了异常,则通过`Console.WriteLine`向用户显示一条错误消息。 现在让我们用不同的场景来测试这个应用程序,以验证PDF生成和验证规则。 ### 测试应用程序 在代码示例中,有三个场景需要测试: 1. 空客户姓名:让客户姓名为空以触发验证错误。 2. 空发票项目:提供一个空的发票项目列表以触发验证错误。 3. 成功生成:提供有效内容以成功生成PDF。 运行应用程序并观察控制台中的输出。 ```plaintext Error generating PDF: Validation failed: -- CustomerName: Customer name is required. Severity: Error Error generating PDF: Validation failed: -- InvoiceItems: At least one invoice item is required. Severity: Error PDF generated successfully! ```  **控制台中的输出错误**  **输出PDF文件** 正如预期的那样,前两个场景显示验证错误,第三个场景显示成功消息。 ## 结论 本教程探讨了Fluent Validation,以及如何使用它与IronPDF生成PDF文档。 首先通过设置控制台应用和定义PDF内容类开始。 然后,使用Fluent Validation创建验证规则,并通过不同场景测试PDF生成。 Fluent Validation为.NET应用程序中的对象验证提供了一种灵活且易于使用的方法。 它允许您以强类型的方式定义验证规则,自定义错误消息,并优雅地处理验证错误。 [IronPDF Free Trial & Licensing Information](trial-license)提供免费试用,许可证起价为每位开发者$499。 常见问题解答 如何在 C# 中集成 Fluent Validation 与 PDF 生成? 要在 C# 中集成 Fluent Validation 与 PDF 生成,您可以在 Visual Studio 中设置一个控制台应用程序,通过 NuGet 安装 FluentValidation 和 IronPDF 包,并在生成 PDF 时使用 Fluent Validation 定义模型验证逻辑。 设置用于 PDF 生成和验证的项目所涉及的步骤是什么? 要设置项目,请在 Visual Studio 中创建一个新的控制台应用程序,通过 NuGet 安装 IronPDF 和 FluentValidation 包,然后使用相关库定义您的 PDF 内容和验证规则。 如何使用 .NET 库从 HTML 内容生成 PDF? 您可以使用 IronPDF 的 RenderHtmlAsPdf 方法从 HTML 内容生成 PDF,它允许您将 HTML 字符串或文件转换为高质量的 PDF。 教程中 PdfService 类的目的是什么? 教程中的 PdfService 类旨在通过先使用 Fluent Validation 验证内容来管理 PDF 生成。在成功验证后,它使用 IronPDF 的 ChromePdfRenderer 和 RenderHtmlAsPdf 方法创建 PDF。 如何使用 Fluent Validation 定义验证规则? Fluent Validation 中的验证规则是通过创建继承自 AbstractValidator<T> 的验证类来定义的。在此类中,RuleFor 方法用于为每个属性指定条件,允许定制错误消息和规则链。 如果在 PDF 生成过程中验证失败会发生什么? 如果验证失败,Fluent Validation 将抛出一个 ValidationException,其中包含关于验证错误的详细信息,可以用于通知用户出了什么问题。 我可以将 Fluent Validation 用于复杂对象的验证吗? 可以,Fluent Validation 支持通过使用子验证器进行复杂对象的验证,允许您验证模型中的嵌套属性和集合。 如何在 Fluent Validation 中自定义错误信息? 在 Fluent Validation 中,自定义错误消息可以使用 WithMessage 方法为每个通过 RuleFor 指定的验证规则定义。 PDF 生成库是否有试用版可用? 是的,IronPDF 为开发者提供一个免费的试用版来测试库的功能,许可证选项起价为每位开发者 $499。 IronPDF 是否完全兼容 .NET 10? 是的。IronPDF 完全兼容 .NET 10,并支持包括 Windows、Linux 和 macOS 在内的多种平台,以及各种项目类型(控制台、Web、桌面、Blazor 等)。它无需任何额外设置即可在最新的运行时环境中直接运行。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布十一月 13, 2025 如何在 C# 中合并两个 PDF 字节数组 使用 IronPDF 在 C# 中合并两个 PDF 字节数组。学习通过简单的代码示例从字节数组、内存流和数据库合并多个 PDF 文件。 阅读更多 已发布十一月 13, 2025 如何创建 ASP.NET MVC PDF 查看器 为 ASP.NET MVC 应用程序构建一个强大的 PDF 查看器。显示 PDF 文档,将视图转换为 PDF,并使用 IronPDF 添加交互功能。 阅读更多 已发布十一月 13, 2025 如何构建 .NET HTML 到 PDF 转换器 学习如何使用 IronPDF 在 .NET 中将 HTML 转换为 PDF。 阅读更多 PDF与PDFA(开发人员如何工作)如何使用ChatGPT与IronPDF为C#...
已发布十一月 13, 2025 如何在 C# 中合并两个 PDF 字节数组 使用 IronPDF 在 C# 中合并两个 PDF 字节数组。学习通过简单的代码示例从字节数组、内存流和数据库合并多个 PDF 文件。 阅读更多
已发布十一月 13, 2025 如何创建 ASP.NET MVC PDF 查看器 为 ASP.NET MVC 应用程序构建一个强大的 PDF 查看器。显示 PDF 文档,将视图转换为 PDF,并使用 IronPDF 添加交互功能。 阅读更多