在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在当前的软件开发环境中,制作高质量的文档和保证数据的完整性是必不可少的任务。 在本篇文章中,我们将了解如何结合强大的 C# 库、Flunt C# 和 IronPDF 来改进数据验证和文档创建的工作流程。 开发人员可以为各种应用构建有效、可靠的解决方案。软件应用利用 IronPDF 复杂的 PDF 制作功能和 Flunt 强大的验证功能。
创建一个新的 C# 控制台项目。
从 NuGet 安装 Flunt 软件包。
导入命名空间并继承类。
在数据模型中添加验证。
多功能、轻量级的 .NET Framework Flunt 是为促进 C# 应用程序中流畅的验证和通知模式的开发而创建的。 当开发人员使用 Flunt 以流畅和富有表现力的方式构建验证规则和业务逻辑时,代码就会变得更加易读和可维护。 借助 Flunt 广泛的集成验证技术和扩展功能,开发人员可以轻松验证对象和集合等复杂的数据结构。
此外,Flunt 是提高 .NET 库应用程序可靠性和健壮性的有用工具,因为它可以轻松与当前的代码库和框架集成。 总而言之,Flunt 鼓励采用声明式方法进行验证和错误处理,使开发人员能够编写出更简洁、更健壮的代码。
流畅的界面: Flunt 为构建验证规则提供了一个清晰简洁的界面,简化了复杂验证逻辑的表达。
可链式验证: 通过自然连接验证规则,只需少量代码即可创建可链式验证方案。
集成验证器: Flunt 自带多个内置验证器,用于常用数据类型,包括日期、整数、字符串和集合。 流畅的语法可使这些验证器轻松应用于属性。
自定义验证规则: 通过扩展 Flunt 框架,开发人员可以添加自定义验证规则,使验证逻辑适应特定领域的要求。
通知系统: 为了报告验证问题和收集错误信息,Flunt 提供了一个通知系统。 这样,开发人员就可以简单地通知用户或其他应用程序组件验证失败。
与框架集成: Flunt 可轻松与包括 Entity Framework 和 ASP.NET Core 在内的知名框架和库连接,从而可简单地将验证逻辑添加到已存在的项目中。
可测试性: Flunt 有利于测试驱动开发(TDD)通过对应用程序代码和验证逻辑进行明确划分,使单元测试验证规则变得简单。
开源和繁荣的社区:一群开发人员积极维护 Flunt,使其成为开源软件。 这样才能保证对框架的持续维护、改进和支持。
通知和验证命名空间是 Flunt 基类库的一部分,应可在 C# 项目中默认访问。 Flunt 通过提供灵活的界面来定义和应用验证规则,从而加速 C# 程序的验证。 它支持更简洁的代码、更强的可读性和全面的错误处理,使验证用户输入、域对象和 API 请求变得更容易。
Flunt 由多种 C# 应用程序类型实现,包括 Windows 控制台、Web 应用程序和 Windows 窗体(WinForms). 虽然每个框架的实现方式不同,但总体概念始终如一。
您可以在安装后立即使用以下代码 Flunt。 这是一个简单的示例,向您展示如何使用 Flunt 构建验证规则:
using Flunt.Validations;
static void Main(string[] args)
{
var person = new Person { Name = "Jack", Age = -25 };
var contract = new PersonContract(person);
// validation checks
if (contract.IsValid)
{
Console.WriteLine("Person is valid!");
}
else
{
Console.WriteLine("Validation failed:");
foreach (var notification in contract.Notifications)
{
Console.WriteLine($"- {notification.Key}:{notification.Message}");
}
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class PersonContract : Contract<Person>
{
public PersonContract(Person person)
{
// ensure the correct format of the object
Requires()
.IsNotNull(person, nameof(person))
.IsNotEmpty(person.Name, nameof(person.Name), "Name is required")
.IsGreaterThan(person.Age, 0, nameof(person.Age), "Age must be a positive number");
}
}
using Flunt.Validations;
static void Main(string[] args)
{
var person = new Person { Name = "Jack", Age = -25 };
var contract = new PersonContract(person);
// validation checks
if (contract.IsValid)
{
Console.WriteLine("Person is valid!");
}
else
{
Console.WriteLine("Validation failed:");
foreach (var notification in contract.Notifications)
{
Console.WriteLine($"- {notification.Key}:{notification.Message}");
}
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class PersonContract : Contract<Person>
{
public PersonContract(Person person)
{
// ensure the correct format of the object
Requires()
.IsNotNull(person, nameof(person))
.IsNotEmpty(person.Name, nameof(person.Name), "Name is required")
.IsGreaterThan(person.Age, 0, nameof(person.Age), "Age must be a positive number");
}
}
Imports Flunt.Validations
Shared Sub Main(ByVal args() As String)
Dim person As New Person With {
.Name = "Jack",
.Age = -25
}
Dim contract = New PersonContract(person)
' validation checks
If contract.IsValid Then
Console.WriteLine("Person is valid!")
Else
Console.WriteLine("Validation failed:")
For Each notification In contract.Notifications
Console.WriteLine($"- {notification.Key}:{notification.Message}")
Next notification
End If
End Sub
Public Class Person
Public Property Name() As String
Public Property Age() As Integer
End Class
Public Class PersonContract
Inherits Contract(Of Person)
Public Sub New(ByVal person As Person)
' ensure the correct format of the object
Requires().IsNotNull(person, NameOf(person)).IsNotEmpty(person.Name, NameOf(person.Name), "Name is required").IsGreaterThan(person.Age, 0, NameOf(person.Age), "Age must be a positive number")
End Sub
End Class
人 "类: 与 "FluentValidation "示例中的相同。
PersonContract
: 该类源于 Flunt 的基本概念 "Contract.Verifications"。 使用 Requires
方法,构造函数接收一个 Person 对象并提供验证规则。 Requires
提供了一种可连锁的方法来添加多个验证。 验证通过 IsNotNull
、NotEmpty
、HasMinLength
和 IsGreaterThan
等方法进行。 每个验证规则都有个性化的错误信息。
验证: 类似于 FluentValidation.Together
的示例,它与对象一起创建了一个 PersonContract
实例和一个 Person 对象。 验证结果由合同的 Valid 属性显示。 根据验证结果,将显示成功或失败通知以及特定的错误细节。
对于 C# 应用程序中的验证和通知处理,Flunt 提供了许多操作,例如:
创建验证规则: 要为必填字段、数据类型、值范围、最大长度和最小长度等属性创建验证规则,请使用 fluent 界面。
执行验证:为保证数据的完整性和业务逻辑的一致性,需要根据预定义的规则验证对象。
管理验证错误: 注意并记录验证错误,将其作为警报,并通过向用户提供错误信息或记录错误以便排除故障的方式礼貌地对其做出回应。 个性化验证逻辑 使用独特的验证规则来扩展 Flunt,以应对复杂的验证环境或特定领域的要求。
与框架集成: 为提高当前应用程序的验证能力,Flunt 可与许多著名的 .NET 框架和库无缝集成,包括 Entity Framework、ASP.NET Core 等。
开发人员可以利用这两种技术的优势,通过将 Flunt 与 IronPDF 集成,加快 C# 应用程序中的业务逻辑验证和文档创建。 开发人员在使用 Flunt 验证输入数据后,可使用 IronPdf 创建 PDF 文档,从而使应用程序更加可靠和用户友好。
Install-Package IronPdf
探索并从搜索结果中选择 IronPDF 软件包后,点击 "安装 "按钮。 Visual Studio 将负责安装和下载。
要了解有关 IronPDF 功能、兼容性和其他下载选择的更多信息,请参阅其NuGet 软件包详情页在 NuGet 网站上。
作为替代方案,您可以利用 IronPdf 的 DLL 文件将其直接包含到您的项目中。 要获取包含 DLL 的 ZIP 文件,请访问以下网站IronPDF ZIP 下载页面. 解压缩 DLL 后,将其包含在您的项目中。
让我们创建一个基本的 C# 应用程序,使用 IronPdf 创建 PDF,使用 Flunt 进行数据验证。 在本例中,我们将使用 Flunt 验证注册表单的用户输入,并使用 IronPDF 创建 PDF 文档,其中包含已验证的用户数据摘要。
人员类: 定义了一个具有姓名和年龄属性的人员类。 我们在构造函数中使用 Flunt 的流畅接口,根据预定义的验证规则验证 Person 数据。
生成 PDF: 定义了一个名为 "RenderHtmlAsPdf "的方法,该方法接受一个用户对象作为输入。 该函数通过使用 IronPDF 的 HtmlToPdf
类将代表用户注册摘要的 HTML 文本渲染为 PDF 文档。
主要方法: 使用样本 Person 数据,我们在 Main 方法中构建一个 User 类实例。 接下来,我们使用 Flunt 的 "IsValid "属性来确定 Person 数据是否合法。 为了创建 PDF 文档,如果数据正确,我们会调用 IronPdf 方法。 否则,将在控制台上显示验证问题。
通过将用于生成 PDF 的 IronPDF 与用于数据验证的 Flunt 相结合,我们开发了一种快速工作流程,用于评估用户输入并在 C# 应用程序中生成 PDF 文档。 这种方法可以确保数据的完整性,生成专家级质量的论文,并鼓励编写清晰、可读性强且可维护的代码。 要了解有关 IronPDF 功能的更多信息,请参阅文档页面. 以下是示例代码片段。
using IronPdf;
using System;
using System.Linq;
using System.Text;
using Flunt.Validations;
namespace ConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
var person = new Person { Name = "Jack", Age = -25 };
var contract = new PersonContract(person);
if (contract.IsValid)
{
Console.WriteLine("Person is valid!");
}
else
{
sb.Append("<p>Validation failed: </p>");
foreach (var notification in contract.Notifications)
{
sb.Append($"- {notification.Key}: {notification.Message}");
}
}
var renderer = new IronPdf.HtmlToPdf();
//Set HTML content for the page
var pdfDocument = renderer.RenderHtmlAsPdf(sb.ToString());
// save the document
pdfDocument.SaveAs("output.pdf");
//Dispose the render object
renderer.Dispose();
//Display a message
Console.WriteLine("Report generated successfully!");
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class PersonContract : Contract<Person>
{
public PersonContract(Person person)
{
Requires()
.IsNotNull(person, nameof(person))
.IsNotEmpty(person.Name, nameof(person.Name), "Name is required")
.IsGreaterThan(person.Age, 0, nameof(person.Age), "Age must be a positive number");
}
}
}
using IronPdf;
using System;
using System.Linq;
using System.Text;
using Flunt.Validations;
namespace ConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
var person = new Person { Name = "Jack", Age = -25 };
var contract = new PersonContract(person);
if (contract.IsValid)
{
Console.WriteLine("Person is valid!");
}
else
{
sb.Append("<p>Validation failed: </p>");
foreach (var notification in contract.Notifications)
{
sb.Append($"- {notification.Key}: {notification.Message}");
}
}
var renderer = new IronPdf.HtmlToPdf();
//Set HTML content for the page
var pdfDocument = renderer.RenderHtmlAsPdf(sb.ToString());
// save the document
pdfDocument.SaveAs("output.pdf");
//Dispose the render object
renderer.Dispose();
//Display a message
Console.WriteLine("Report generated successfully!");
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class PersonContract : Contract<Person>
{
public PersonContract(Person person)
{
Requires()
.IsNotNull(person, nameof(person))
.IsNotEmpty(person.Name, nameof(person.Name), "Name is required")
.IsGreaterThan(person.Age, 0, nameof(person.Age), "Age must be a positive number");
}
}
}
Imports IronPdf
Imports System
Imports System.Linq
Imports System.Text
Imports Flunt.Validations
Namespace ConsoleApp
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim sb As New StringBuilder()
Dim person As New Person With {
.Name = "Jack",
.Age = -25
}
Dim contract = New PersonContract(person)
If contract.IsValid Then
Console.WriteLine("Person is valid!")
Else
sb.Append("<p>Validation failed: </p>")
For Each notification In contract.Notifications
sb.Append($"- {notification.Key}: {notification.Message}")
Next notification
End If
Dim renderer = New IronPdf.HtmlToPdf()
'Set HTML content for the page
Dim pdfDocument = renderer.RenderHtmlAsPdf(sb.ToString())
' save the document
pdfDocument.SaveAs("output.pdf")
'Dispose the render object
renderer.Dispose()
'Display a message
Console.WriteLine("Report generated successfully!")
End Sub
End Class
Public Class Person
Public Property Name() As String
Public Property Age() As Integer
End Class
Public Class PersonContract
Inherits Contract(Of Person)
Public Sub New(ByVal person As Person)
Requires().IsNotNull(person, NameOf(person)).IsNotEmpty(person.Name, NameOf(person.Name), "Name is required").IsGreaterThan(person.Age, 0, NameOf(person.Age), "Age must be a positive number")
End Sub
End Class
End Namespace
以下是上述代码的执行输出:
IronPDF 和 Flunt 是两个强大的 C# 库,它们可以很好地协同工作,简化文档创建和数据验证的工作流程。 借助 IronPDF 复杂的 PDF 制作功能和 Flunt 强大的验证功能,开发人员可以为各种应用构建可靠、有效和高水准的解决方案。 Flunt 和 IronPDF 为开发人员提供了创建高质量软件所需的工具,无论他们是开发桌面应用程序、网络应用程序还是基于云的解决方案,都能满足用户和利益相关者的需求。
一年的软件支持、永久许可证和库升级都包含在 $749 Lite 捆绑包中。 IronPDF 提供免费许可详细信息有关费用和许可证要求的更多详细信息,请访问 IronPdf 网站。 有关 Iron Software 库的更多信息,请访问Iron Software 官方网站。