Altbilgi içeriğine atla
IRONPDF KULLANARAK

C# içinde Fluent Validation ile IronPDF nasıl kullanılır.

Fluent Validation nedir?

FluentValidation, güçlü tiplenmiş doğrulama kuralları oluşturmaya yardımcı olan bir .NET doğrulama kütüphanesidir. Akici bir arayüz ve lambda ifadeleri kullanir, bu da kodun daha okunabilir ve sürdürülebilir hale gelmesini saglar. Model sınıflarınızdaki veri anotasyonları veya manuel doğrulama yerine, doğrulama mantığınız için ayrı bir sınıf oluşturmak amacıyla Fluent Validation kullanabilirsiniz.

Fluent Validation, doğrulama oyununa daha fazla esneklik getirir. Yaygın senaryolar için yerleşik doğrulayıcılar, özel doğrulamalar oluşturma yeteneği ve doğrulama kurallarını zincirleme basit bir yolu ile Fluent Validation, .NET Core araç setinde güçlü bir araçtır.

Fluent Validation'in Anlaşılması

Fluent Validation, model sınıflarınız için doğrulama kuralları oluşturmayı kolaylaştıran bir açık kaynak .NET kütüphanesidir.

  1. Dogrulayıcılar: Doğrulayıcılar, doğrulama mantığını kapsayan sınıflardır. Genellikle AbstractValidator<t> temel sınıfından türetilerek oluşturulurlar.
  2. Kurallar: Bir kural, bir özelliğin karşılaması gereken bir doğrulama koşuludur. Kurallar bir doğrulayıcı sınıfında RuleFor yöntemi kullanılarak tanımlanır.
  3. Geçerlilik Başarısızlıkları: Bir kural başarısız olursa, Fluent Validation hata hakkında detayları, özellik adı ve hata mesajı dahil olmak üzere içeren bir ValidationFailure nesnesi oluşturur.

IronPDF Nedir?

IronPDF - HTML'i C#'te PDF'e dönüştürme, HTML içeriğinden PDF belgeleri oluşturmanıza olanak tanıyan güçlü bir .NET kütüphanesidir. Faturalar, raporlar veya başka herhangi türde bir belge oluşturmanız gerekirse, IronPDF kullanımı kolay bir çözüm sunar. ASP.NET Core uygulamalarınızla sorunsuz bir şekilde entegre olur, sadece birkaç satır kodla yüksek kalitede PDF dosyaları oluşturmanızı sağlar.

IronPDF ile Fluent Validation Kullanma

Artık Fluent Validation ve IronPDF'in ne olduğunu anladıgimiza gore, bunların nasıl birlikte kullanılabilecegini goreceğiz. Bu rehber, FluentValidation'un ASP.NET Core'de kullanılarak fatura iceriginin doğrulandığı, ardından IronPDF kullanılarak PDF olarak oluşturulduğu bir fatura oluşturucu oluşturmanıza yardımcı olacaktır.

Projeyi Kurma

Başlamak icin, Visual Studio'da veya tercih ettiginiz geliştirme ortamında yeni bir Konsol Uygulaması oluşturalım.

  1. Visual Studio'yu acın ve Dosya > Yeni > Proje'ye gidin.
  2. Proje şablonu olarak "Console App (ASP.NET Core)"'u seçin ve projenize bir isim verin.

    C# ile IronPDF Kullanarak Fluent Validation Nasıl Kullanılır, Şekil 1: Yeni bir Konsol Uygulaması Oluşturun Yeni bir Konsol Uygulaması oluşturun

  3. Sonraki düğmesine tıklayın ve projenizi adlandırarak ve depo konumunu seçerek yapılandırın.

    C# ile IronPDF Kullanarak Fluent Validation Nasıl Kullanılır, Şekil 2: Yeni uygulamayı yapılandırın Yeni uygulamayı yapılandırın

  4. Sonraki düğmesine tıklayın ve .NET Framework'u seçin. En son .NET Framework (7) önerilir.

    C# ile IronPDF Kullanarak Fluent Validation Nasıl Kullanılır, Şekil 3: .NET Framework seçimi .NET Framework seçimi

  5. Projeyi oluşturmak için Oluştur düğmesine tıklayın.

Gerekli Paketleri Yükleyin

Proje oluşturulduktan sonra Fluent Validation ve IronPDF için gerekli NuGet paketlerini ekleyin.

  1. Solution Explorer'da projeye sağ tıklayın ve "NuGet Paketlerini Yönet" seçeneğini seçin.
  2. "FluentValidation" arayın ve paketi projenize eklemek için "Yükle"ye tıklayın.

    C# ile IronPDF Kullanarak Fluent Validation Nasıl Kullanılır, Şekil 4: FluentValidation paketini NuGet Paket Yöneticisi UI'da yükleyin NuGet Paket Yöneticisi UI'sinde FluentValidation paketini yükleyin

  3. Benzer şekilde, "IronPDF - Güçlü .NET PDF Kutuphanesi" arayın ve IronPDF paketini yükleyin.

Alternatif olarak, IronPDF'i NuGet Paket Yöneticisi Konsolu ile aşağıdaki komutla yükleyebilirsiniz:

Install-Package IronPdf

C# ile IronPDF Kullanarak Fluent Validation Nasıl Kullanılır, Şekil 5: Paket Yöneticisi Konsolunda IronPdf paketini yükleyin IronPdf paketini Paket Yöneticisi Konsolunda yükleyin

Proje hazır ve gerekli paketler yüklendiğinde, PDF içerik sınıfını tanımlamaya geçelim.

PDF İçeriğini Tanımlama

Bu örnekte, iki sınıftaki HTML kodlarından basit bir fatura PDF'si oluşturulacaktır: InvoiceContent ve InvoiceItem.

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<InvoiceItem> InvoiceItems { get; set; }

    // Constructs the HTML representation of the invoice
    public override string RenderHtml()
    {
        string invoiceItemsHtml = string.Join("", InvoiceItems.Select(item => $"<li>{item.Description}: {item.Price}</li>"));
        return $"<h1>Invoice for {CustomerName}</h1><p>{Address}</p><ul>{invoiceItemsHtml}</ul>";
    }
}

public class InvoiceItem
{
    public string Description { get; set; }
    public decimal Price { get; set; }
}
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<InvoiceItem> InvoiceItems { get; set; }

    // Constructs the HTML representation of the invoice
    public override string RenderHtml()
    {
        string invoiceItemsHtml = string.Join("", InvoiceItems.Select(item => $"<li>{item.Description}: {item.Price}</li>"));
        return $"<h1>Invoice for {CustomerName}</h1><p>{Address}</p><ul>{invoiceItemsHtml}</ul>";
    }
}

public class InvoiceItem
{
    public string Description { get; set; }
    public decimal Price { get; set; }
}
Imports System.Collections.Generic
Imports System.Linq

Public MustInherit Class PdfContent
	' Abstract method to generate the HTML string
	Public MustOverride Function RenderHtml() As String
End Class

Public Class InvoiceContent
	Inherits PdfContent

	Public Property CustomerName() As String
	Public Property Address() As String
	Public Property InvoiceItems() As List(Of InvoiceItem)

	' Constructs the HTML representation of the invoice
	Public Overrides Function RenderHtml() As String
		Dim invoiceItemsHtml As String = String.Join("", InvoiceItems.Select(Function(item) $"<li>{item.Description}: {item.Price}</li>"))
		Return $"<h1>Invoice for {CustomerName}</h1><p>{Address}</p><ul>{invoiceItemsHtml}</ul>"
	End Function
End Class

Public Class InvoiceItem
	Public Property Description() As String
	Public Property Price() As Decimal
End Class
$vbLabelText   $csharpLabel

Yukarıdaki kodda, RenderHtml adlı soyut bir yöntem ile soyut bir PdfContent sınıfı tanımlanır. InvoiceContent sınıfı PdfContent sınıfını genişletir ve fatura PDF'sinin içeriğini temsil eder. Müşterinin adı, adresi ve fatura kalemlerinin bir listesi için özelliklere sahiptir. InvoiceItem sınıfı 'Description' ve 'Price' olmak üzere iki özelliğe sahiptir. RenderHtml yöntemi, içeriğe göre faturanın HTML işaretlemesini oluşturur.

PDF içeriği tanımlandığına göre, Fluent Validation kullanarak doğrulama kuralları oluşturmaya geçelim.

Doğrulama Kuralları Oluşturma

InvoiceContent sınıfı için doğrulama kuralları oluşturmak üzere InvoiceContentValidator adlı bir doğrulayıcı sınıfı oluşturun. Bu sınıf, FluentValidation tarafından sağlanan AbstractValidator<InvoiceContent> sınıfından türeyacaktır.

using FluentValidation;

public class InvoiceContentValidator : AbstractValidator<InvoiceContent>
{
    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<InvoiceItem>
{
    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.");
    }
}
using FluentValidation;

public class InvoiceContentValidator : AbstractValidator<InvoiceContent>
{
    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<InvoiceItem>
{
    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.");
    }
}
Imports FluentValidation

Public Class InvoiceContentValidator
	Inherits AbstractValidator(Of InvoiceContent)

	Public Sub New()
		RuleFor(Function(content) content.CustomerName).NotEmpty().WithMessage("Customer name is required.")
		RuleFor(Function(content) content.Address).NotEmpty().WithMessage("Address is required.")
		RuleFor(Function(content) content.InvoiceItems).NotEmpty().WithMessage("At least one invoice item is required.")
		RuleForEach(Function(content) content.InvoiceItems).SetValidator(New InvoiceItemValidator())
	End Sub
End Class

Public Class InvoiceItemValidator
	Inherits AbstractValidator(Of InvoiceItem)

	Public Sub New()
		RuleFor(Function(item) item.Description).NotEmpty().WithMessage("Description is required.")
		RuleFor(Function(item) item.Price).GreaterThanOrEqualTo(0).WithMessage("Price must be greater than or equal to 0.")
	End Sub
End Class
$vbLabelText   $csharpLabel

Kaynak kodda, InvoiceContentValidator sınıfı tanımlanır ve AbstractValidator<InvoiceContent> sınıfından türetilir. Doğrulayıcı sınıfının yapıcısında, InvoiceContent sınıfının her bir özelliği için doğrulama kurallarını RuleFor yöntemi tanımlar.

Örneğin, RuleFor(content => content.CustomerName) müşteri adının boş olmaması gerektiğini belirtir. Benzer şekilde, adres ve fatura kalemleri özellikleri için doğrulama kuralları tanımlanır.

RuleForEach yöntemi InvoiceItems listesindeki her öğe üzerinde gezinir ve InvoiceItemValidator uygular. InvoiceItemValidator sınıfı, InvoiceItem sınıfı için doğrulama kuralları içerir.

Bu doğrulama kuralları ile birlikte, IronPDF kullanarak PDF oluşturma işlemine geçelim.

IronPDF Kullanarak PDF Oluşturma

IronPDF - PDF Belgelerini Oluştur ve Düzenle, PDF belgelerini oluşturmak ve değiştirmek için popüler bir .NET kutuphanesidir. IronPDF, doğrulanmış fatura içeriğine dayalı olarak PDF'yi oluşturmak için kullanılacaktır.

using IronPdf;
using FluentValidation;

public class PdfService
{
    // Generates a PDF document for the provided content
    public PdfDocument GeneratePdf<t>(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<t> GetValidatorForContent<t>(T content) where T : PdfContent
    {
        if (content is InvoiceContent)
        {
            return (IValidator<t>)new InvoiceContentValidator();
        }
        else
        {
            throw new NotSupportedException("Unsupported content type.");
        }
    }
}
using IronPdf;
using FluentValidation;

public class PdfService
{
    // Generates a PDF document for the provided content
    public PdfDocument GeneratePdf<t>(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<t> GetValidatorForContent<t>(T content) where T : PdfContent
    {
        if (content is InvoiceContent)
        {
            return (IValidator<t>)new InvoiceContentValidator();
        }
        else
        {
            throw new NotSupportedException("Unsupported content type.");
        }
    }
}
Imports IronPdf
Imports FluentValidation

Public Class PdfService
    ' Generates a PDF document for the provided content
    Public Function GeneratePdf(Of T As PdfContent)(content As T) As PdfDocument
        ' Validate the content using the appropriate validator
        Dim validator = GetValidatorForContent(content)
        Dim validationResult = validator.Validate(content)

        ' Check if validation is successful
        If Not validationResult.IsValid Then
            Throw New FluentValidation.ValidationException(validationResult.Errors)
        End If

        ' Generate the PDF using IronPDF
        Dim renderer = New ChromePdfRenderer()
        Return renderer.RenderHtmlAsPdf(content.RenderHtml())
    End Function

    ' Retrieves the appropriate validator for the content
    Private Function GetValidatorForContent(Of T As PdfContent)(content As T) As IValidator(Of T)
        If TypeOf content Is InvoiceContent Then
            Return CType(New InvoiceContentValidator(), IValidator(Of T))
        Else
            Throw New NotSupportedException("Unsupported content type.")
        End If
    End Function
End Class
$vbLabelText   $csharpLabel

PdfService sınıfı bir GeneratePdf yöntemi sağlar. Bu yöntem, bir PdfContent nesnesini giriş olarak alır ve doğrulanmış içeriğe dayanarak PDF belgesini oluşturur.

İlk olarak, içeriğin türünü kontrol eden ve uygun doğrulayıcıyı döndüren GetValidatorForContent yöntemini çağırarak uygun doğrulayıcıyı içeriğe göre alır. Bizim durumumuzda, InvoiceContent destekliyoruz ve InvoiceContentValidator kullanıyoruz.

Daha sonra, doğrulayıcı Validate yöntemini çağırarak içerik doğrulanır. Doğrulama sonucu bir ValidationResult nesnesinde saklanır.

Doğrulama başarısız olursa (!validationResult.IsValid), doğrulama hataları ile birlikte bir FluentValidation.ValidationException fırlatılır. Aksi takdirde, IronPDF kullanılarak PDF oluşturulur.

ChromePdfRenderer örneği oluşturulur ve HTML içeriği PDF olarak render edilir. RenderHtmlAsPdf yöntemi, renderer nesnesinde, content.RenderHtml yönteminin oluşturduğu HTML'yi geçirerek çağırılır ve PDF belgesi oluşturulur.

PDF oluşturma mantığını tanımladığımıza göre, olabilecek doğrulama hataları ile nasıl başa çıkacağımızı ele alalım.

Doğrulama Hataları ile Başa Çıkma

Bir doğrulama hatası meydana geldiğinde, bir hata mesajı göstermek ve bu durumu uygun şekilde ele almak isteriz. Main sınıfının Program yöntemini, herhangi bir istisnayı ele almak ve kullanıcıya anlamlı mesajlar göstermek için değiştirelim.

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<InvoiceItem> {
                    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<InvoiceItem>()  // 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<InvoiceItem> {
                    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);
        }
    }
}
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<InvoiceItem> {
                    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<InvoiceItem>()  // 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<InvoiceItem> {
                    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);
        }
    }
}
Imports System
Imports System.Collections.Generic

Public Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfService As New PdfService()

		' Test 1: Empty Customer Name
		Try
			Dim invoiceContent As New InvoiceContent With {
				.CustomerName = "",
				.Address = "123 Main St, Anytown, USA",
				.InvoiceItems = New List(Of InvoiceItem) From {
					New InvoiceItem With {
						.Description = "Item 1",
						.Price = 19.99D
					},
					New InvoiceItem With {
						.Description = "Item 2",
						.Price = 29.99D
					}
				}
			}

			Dim pdfDocument = pdfService.GeneratePdf(invoiceContent)
			pdfDocument.SaveAs("C:\TestInvoice.pdf")
			Console.WriteLine("PDF generated successfully!")
		Catch ex As Exception
			Console.WriteLine("Error generating PDF: " & ex.Message)
		End Try

		' Test 2: Empty InvoiceItems
		Try
			Dim invoiceContent As New InvoiceContent With {
				.CustomerName = "John Doe",
				.Address = "123 Main St, Anytown, USA",
				.InvoiceItems = New List(Of InvoiceItem)()
			}

			Dim pdfDocument = pdfService.GeneratePdf(invoiceContent)
			pdfDocument.SaveAs("C:\TestInvoice.pdf")
			Console.WriteLine("PDF generated successfully!")
		Catch ex As Exception
			Console.WriteLine("Error generating PDF: " & ex.Message)
		End Try

		' Successful generation
		Try
			Dim invoiceContent As New InvoiceContent With {
				.CustomerName = "John Doe",
				.Address = "123 Main St, Anytown, USA",
				.InvoiceItems = New List(Of InvoiceItem) From {
					New InvoiceItem With {
						.Description = "Item 1",
						.Price = 19.99D
					},
					New InvoiceItem With {
						.Description = "Item 2",
						.Price = 29.99D
					}
				}
			}
			Dim pdfDocument = pdfService.GeneratePdf(invoiceContent)
			pdfDocument.SaveAs("C:\TestInvoice.pdf")
			Console.WriteLine("PDF generated successfully!")
		Catch ex As Exception
			Console.WriteLine("Error generating PDF: " & ex.Message)
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

Yukarıdaki kodda, meydana gelebilecek istisnaları yakalamak için try-catch blokları kullanılır. Bir istisna yakalandığında, Console.WriteLine kullanılarak kullanıcıya bir hata mesajı gösterilecektir.

Şimdi, farklı senaryolarla bu uygulamayı test edelim ve PDF oluşturmayı ve doğrulama kurallarını doğrulayalım.

Uygulamayı Test Etme

Kod örneğinde test edilecek üç senaryo vardır:

  1. Boş müşteri adı: Bir doğrulama hatası tetiklemek için müşteri adını boş bırakın.
  2. Boş fatura maddeleri: Fatura maddeleri için boş bir liste sağlayarak bir doğrulama hatası tetikleyin.
  3. Başarılı oluşturma: Geçerli içerik sağlayarak PDF'yi başarıyla oluşturun.

Uygulamayı çalıştırın ve konsoldaki çıktıyı gözlemleyin.

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!

C# ile IronPDF Kullanarak Fluent Validation Nasıl Kullanılır, Şekil 6: Konsoldaki çıktı hatası Konsoldaki çıktı hatası

C# ile IronPDF Kullanarak Fluent Validation Nasıl Kullanılır, Şekil 7: Çıktı PDF dosyası Çıkış PDF dosyası

Beklendiği gibi, ilk iki senaryo için doğrulama hataları ve üçüncü senaryo için başarılı bir mesaj gösterilmektedir.

Sonuç

Bu eğitimde, Fluent Validation ve IronPDF kullanarak nasıl PDF belgeleri oluşturulacağı incelendi. Bir Konsol Uygulaması kurarak ve PDF içerik sınıfını tanımlayarak başlandı. Daha sonra, Fluent Validation kullanarak doğrulama kuralları oluşturuldu ve farklı senaryolarla PDF oluşturma test edildi.

Fluent Validation, .NET uygulamalarında nesneleri doğrulamak için esnek ve kolay kullanımlı bir yaklaşım sunar. Size güçlü tipleme ile doğrulama kuralları tanımlamanıza, hata mesajlarını özelleştirmenize ve doğrulama hatalarını uygun şekilde ele almanıza olanak tanır.

IronPDF Ücretsiz Deneme ve Lisanslama Bilgileri ücretsiz deneme sunar ve lisans geliştirici başına $499'dan başlamaktadır.

Sıkça Sorulan Sorular

C#'ta Fluent Validation ile PDF oluşturmayı nasıl entegre edebilirim?

C#'ta Fluent Validation ile PDF oluşturmayı entegre etmek için Visual Studio'da bir Konsol Uygulaması kurabilir, NuGet aracılığıyla FluentValidation ve IronPDF paketlerini yükleyebilir ve Fluent Validation kullanarak model doğrulama mantığınızın tanımını yaparken IronPDF ile PDF'ler oluşturabilirsiniz.

PDF oluşturma ve validasyon için bir proje kurulumunda hangi adımlar yer alır?

Bir proje kurmak için Visual Studio'da yeni bir Konsol Uygulaması oluşturun, NuGet aracılığıyla IronPDF ve FluentValidation paketlerini yükleyin ve ardından ilgili kütüphaneleri kullanarak PDF içeriğinizi ve doğrulama kurallarınızı tanımlayın.

HTML içeriğinden bir PDF'yi bir .NET kütüphanesini kullanarak nasıl oluşturabilirim?

HTML dizelerinizi veya dosyalarınızı yüksek kaliteli PDF'lere dönüştürmenizi sağlayan IronPDF'nin RenderHtmlAsPdf yöntemini kullanarak HTML içeriğinden bir PDF oluşturabilirsiniz.

Eğitimdeki PdfService sınıfının amacı nedir?

Eğitimdeki PdfService sınıfı, içeriği önce Fluent Validation kullanarak doğrulayan ve ardından IronPDF'nin ChromePdfRenderer ve RenderHtmlAsPdf yöntemlerini kullanarak PDF oluşturan PDF oluşturmayı yönetmek amacıyla tasarlanmıştır.

Fluent Validation kullanılarak doğrulama kuralları nasıl tanımlanır?

Fluent Validation'da kurallar, AbstractValidator'den türetilen bir validator sınıfı oluşturarak tanımlanır. Bu sınıf içinde, her özelliğe özel koşullar belirtmek için RuleFor yöntemi kullanılır ve bu sayede özel hata mesajları ve kuralların zincirleme olarak tanımlanması sağlanır.

PDF oluşturma sırasında doğrulama başarısız olursa ne olur?

Eğer doğrulama başarısız olursa, Fluent Validation, nelerin yanlış gittiği konusunda kullanıcıyı bilgilendirmek amacıyla ayrıntılı bilgiler içeren bir ValidationException fırlatır.

Karmaşık nesne doğrulamaları için Fluent Validation kullanabilir miyim?

Evet, Fluent Validation, modelinizdeki iç içe geçmiş özellikleri ve koleksiyonları doğrulamanıza olanak tanıyan alt doğrulayıcılar kullanarak karmaşık nesne doğrulamalarına destek verir.

Fluent Validation'da hata mesajlarını nasıl özelleştirebilirim?

Fluent Validation'da hata mesajları, RuleFor ile belirtilen her doğrulama kuralı için WithMessage yöntemi kullanılarak özelleştirilebilir.

PDF oluşturma kütüphanesi için deneme sürümü mevcut mu?

Evet, IronPDF, geliştiricilerin kütüphanenin yeteneklerini test etmeleri için bir ücretsiz deneme sürümü sunar ve lisans seçenekleri geliştirici başına $499'dan başlamaktadır.

IronPDF, .NET 10 ile tamamen uyumlu mu?

Evet. IronPDF, .NET 10 ile tamamen uyumludur ve Windows, Linux, macOS gibi çeşitli proje türlerinde (konsol, web, masaüstü, Blazor vb.) platformları destekler. En son çalışma zamanı ile kutudan çıktığı gibi çalışır, gerekli dolambaçlı yollar olmadan.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara