Altbilgi içeriğine atla
.NET YARDıM

Flunt C# (Geliştiriciler için Nasıl Çalışır)

Mevcut yazılım geliştirme ortamında, yüksek kaliteli dokümantasyon üretmek ve veri bütünlüğünü sağlamak temel görevlerdir. Bu yazıda, güçlü C# kütüphaneleri Flunt C# ve IronPDF'i birleştirerek, veri doğrulama ve belge oluşturma iş akışlarını nasıl geliştireceğinizi inceleyeceğiz. Geliştiriciler, IronPDF'in gelişmiş PDF üretim özelliklerinden ve Flunt'un güçlü doğrulama yeteneklerinden yararlanarak yazılım uygulamaları için etkili ve güvenilir çözümler inşa edebilirler.

How to use Flunt in C

  1. Yeni bir C# konsol projesi oluşturun.
  2. NuGet'ten Flunt paketini yükleyin.
  3. Ad alanını içe aktarın ve sınıfı devralın.
  4. Veri modeline doğrulama ekleyin.
  5. Doğrulama kontrollerini yapın ve sonucu gösterin.

Understanding of Flunt C

Esnek ve hafif bir .NET framework olan Flunt, C# uygulamalarında akıcı doğrulama ve bildirim kalıplarının geliştirilmesini kolaylaştırmak için oluşturulmuştur. Geliştiriciler Flunt'u, doğrulama kuralları ve iş mantığını akıcı ve ifade edici bir şekilde inşa etmek için kullandıklarında kod daha okunabilir ve sürdürülebilir hale gelir. Flunt'un geniş çaplı entegre doğrulama teknikleri ve uzantıları ile geliştiriciler karmaşık veri yapıları, nesneler ve koleksiyonlar gibi yapıları kolayca doğrulayabilirler.

Ayrıca, Flunt mevcut kod tabanları ve çerçevelerle kolayca entegre olduğundan, .NET kütüphane uygulamalarının güvenilirliğini ve sağlamlığını artırmada yararlı bir araçtır. Genel olarak, Flunt bir deklaratif yaklaşımı teşvik ederek doğrulama ve hata yönetimini geliştiricilerin daha temiz, daha sağlam kod yazmalarını sağlar.

Features of Flunt C

Akıcı Arayüz: Flunt, doğrulama kuralları oluşturmak için okunabilir ve özlü bir arayüz sunar, bu da karmaşık doğrulama mantığının ifadesini basitleştirir.

Birbirine Bağlanabilir Doğrulama: Doğrulama kurallarını doğal olarak bağlayarak az kodla birbirine bağlanabilir doğrulama senaryoları oluşturulabilir.

Entegre Doğrulayıcılar: Flunt, tarihler, tamsayılar, dizeler ve koleksiyonlar gibi sıkça kullanılan veri türleri için bir dizi yerleşik doğrulayıcı ile gelir. Akıcı sözdizimi, bu doğrulayıcıların özelliklere kolayca uygulanmasını sağlar.

Özel Doğrulama Kuralları: Flunt çerçevesini genişleterek, geliştiriciler belirli alan gereksinimlerine uyacak şekilde uyarlanmış doğrulama mantığını sağlayan özel doğrulama kuralları ekleyebilir.

Bildirim Sistemi: Doğrulama sorunlarını raporlamak ve hata mesajlarını toplamak için Flunt bir bildirim sistemi sunar. Bu, geliştiricilerin kullanıcıları veya diğer uygulama bileşenlerini doğrulama hataları hakkında bilgilendirmesini kolaylaştırır.

Çerçevelerle Entegrasyon: Flunt, özellikle Entity Framework ve ASP.NET Core gibi tanınmış çerçeveler ve kütüphanelerle kolayca bağlanır ve mevcut projelere doğrulama mantığı eklemeyi kolaylaştırır.

Test Edilebilirlik: Flunt, uygulama koduyla doğrulama mantığı arasında belirgin bir ayrım sunarak test güdümlü geliştirmeyi (TDD) kolaylaştırır, bu da doğrulama kurallarının birim testlerinin yapılmasını kolaylaştırır.

Açık Kaynak ve Canlı Topluluk: Geliştiricilerden oluşan bir grup aktif olarak Flunt'u sürdürüyor, bu da onu açık kaynaklı kılıyor. Bu, çerçevenin sürekli bakımı, geliştirmeleri ve desteğini garanti eder.

Getting Started with Flunt C

C# Projelerinde Flunt Kurulumu

Bildirimler ve Doğrulama ad alanı, Flunt Temel Sınıf Kütüphanesine aittir ve C# projenizde varsayılan olarak erişilebilir olmalıdır. Flunt, doğrulama kurallarının tanımlanması ve uygulanması için esnek bir arayüz sağlayarak C# programlarının doğrulamasını hızlandırır. Daha temiz kod, gelişmiş okunabilirlik ve kapsamlı hata yönetimi için sağladığı destek, kullanıcı girişi, alan nesneleri ve API talepleri doğrulamasını kolaylaştırır.

Windows Konsol ve Formlarda Flunt'u Uygulama

Flunt, Windows Konsolu, web uygulamaları ve Windows Formları (WinForms) gibi birçok C# uygulama türü tarafından uygulanır. Her çerçevenin farklı bir uygulaması olsa da, genel kavram her zaman aynıdır.

Flunt C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - Visual Studio Paket Yöneticisi ile Flunt'u arayın ve kurun

Flunt C# Örneği

Yüklendikten hemen sonra Flunt'u kullanarak aşağıdaki kodu kullanabilirsiniz. Bu, Flunt'u kullanarak doğrulama kuralları oluşturmayı gösteren basit bir örnektir:

using System;
using Flunt.Validations;

public class Program
{
    static void Main(string[] args)
    {
        var person = new Person { Name = "Jack", Age = -25 };
        var contract = new PersonContract(person);

        // Perform 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 System;
using Flunt.Validations;

public class Program
{
    static void Main(string[] args)
    {
        var person = new Person { Name = "Jack", Age = -25 };
        var contract = new PersonContract(person);

        // Perform 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 System
Imports Flunt.Validations

Public Class Program
	Shared Sub Main(ByVal args() As String)
		Dim person As New Person With {
			.Name = "Jack",
			.Age = -25
		}
		Dim contract = New PersonContract(person)

		' Perform 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
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)
		' 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
$vbLabelText   $csharpLabel

Person Sınıfı: Name ve Age özelliklerine sahip bir varlığı temsil eder.

PersonContract: Bu sınıf, Flunt'ın temel Contract<t> kavramından türetilmiştir. Requires yöntemi kullanılarak, yapılandırıcı bir Person nesnesi alır ve doğrulama kuralları sağlar. Requires çoklu doğrulamaları tanımlamak için zincirleme bir yöntem sunar. Doğrulamalar, IsNotNull, IsNotEmpty, IsGreaterThan gibi yöntemlerle gerçekleştirilir. Her doğrulama kuralı, özel bir hata mesajıyla ilişkilendirilmiştir.

Doğrulama: FluentValidation örneğine benzer şekilde, bu bir PersonContract ve bir Person nesnesinin bir örneğini oluşturur. Doğrulama sonuçları sözleşmenin IsValid özelliği tarafından gösterilir. Başarı veya başarısızlık bildirimleri ve belirli hata mesajları, doğrulama sonucuna göre gösterilir.

Flunt İşlemleri

C# uygulamalarında doğrulama ve bildirim yönetimi için Flunt, aşağıdaki gibi birçok işlem sunar:

Doğrulama Kuralları Oluşturma: Zorunlu alanlar, veri türleri, değer aralıkları, maksimum uzunluk ve minimum uzunluk gibi öznitelikler için doğrulama kuralları oluşturmak için akıcı arayüzü kullanın.

Doğrulama Yürütme: Veri bütünlüğünü ve iş mantığına uyumu garantilemek için nesneleri önceden tanımlanmış kurallara göre doğrulayın.

Doğrulama Hatalarını Yönetme: Doğrulama hatalarını not alın ve kayıt altına alın, kullanıcıları hata mesajları vererek ya da sorun giderme için hataları kaydederek kibarca yanıt verin.

Özel Doğrulama Mantığı: Karmaşık doğrulama durumlarına veya belirli alan gereksinimlerine yanıt olarak Flunt'u genişletmek için benzersiz doğrulama kuralları kullanın.

Çerçevelerle Entegrasyon: Mevcut uygulamalarda doğrulama yeteneklerini geliştirmek için Flunt, Entity Framework, ASP.NET Core ve daha fazlasını içeren birçok tanınmış .NET çerçevesi ve kütüphane ile sorunsuz bir şekilde entegre edilebilir.

Flunt'u IronPDF ile Entegre Etme

Geliştiriciler, Flunt'u IronPDF ile entegre ederek, iş mantığı doğrulaması ve belge oluşturma işlemlerini C# uygulamalarında hızlandırmak için her iki teknolojinin gücünü kullanabilir. Geliştiriciler, Flunt'la giriş verilerini doğruladıktan sonra IronPDF'i kullanarak PDF belgeleri oluşturarak uygulamaları daha güvenilir ve kullanıcı dostu hale getirebilirler.

IronPDF'i Kurun

  • Visual Studio projesini başlatın.
  • "Araçlar" > "NuGet Paket Yöneticisi" > "Paket Yöneticisi Konsolu" nu seçin.
  • Paket Yöneticisi Konsolu'na bu komutu girin:
Install-Package IronPdf
  • Alternatif olarak, IronPDF ve diğer gerekli NuGet Paketlerini yüklemek için Çözümler İçin NuGet Paket Yöneticisini kullanabilirsiniz.
  • Arama sonuçlarından IronPDF paketini arayıp seçtikten sonra "Yükle" butonuna tıklayın. Kurulum ve indirme Visual Studio tarafından yönetilecektir.

Flunt C# (How It Works For Developers): Figure 2 - Install IronPDF using the Manage NuGet Package for Solution by searching IronPDF in the search bar of NuGet Package Manager, then select the project and click on the Install button.

  • NuGet, IronPDF paketinin ve proje için gerekli olan herhangi bir bağımlılığın yüklenmesini halledecektir.
  • Kurulumdan sonra, IronPDF projenizde kullanılabilir olacaktır.

NuGet Web Sitesi Üzerinden Yükleme

IronPDF'in özellikleri, uyumluluğu ve diğer indirme seçenekleri hakkında daha fazla bilgi bulmak için NuGet web sitesindeki NuGet paket detay sayfasını ziyaret edin.

DLL kullanarak Yükleme

Alternatif olarak, IronPDF'in DLL dosyasını doğrudan projenize dahil etmek için kullanabilirsiniz. DLL'yi içeren ZIP dosyasını almak için aşağıdaki IronPDF ZIP indirme sayfasını ziyaret edin. DLL'yi açtıktan sonra, projenize dahil edin.

Lojiği Uygulamak

IronPDF'i PDF oluşturmak ve Flunt'u veri doğrulaması için kullanan basit bir C# uygulaması oluşturalım. Bu örnek, kullanıcı kaydı formu için Flunt'u kullanarak kullanıcı girişini doğrulayacak ve onaylanan kullanıcı verilerinin bir özetini PDF belge olarak oluşturacak.

  1. Kişi Sınıfı: Ad ve yaş için özniteliklere sahip bir Kişi sınıfı tanımlanır. Constructor içinde Flunt'un akıcı arayüzünü kullanarak Kişi verilerini önceden tanımlanmış doğrulama kurallarına göre doğruluyoruz.
  2. Pdf Üret: RenderHtmlAsPdf adlı bir yöntem tanımlanmıştır ve bir Kullanıcı nesnesini girdi olarak alır. Bu işlev, IronPDF'in HtmlToPdf sınıfını kullanarak kullanıcı kayıt özeti HTML metnini bir PDF belgesine dönüştürür.
  3. Ana Metot: Örnek Kişi verilerini kullanarak, Ana metot içinde Kullanıcı sınıfının bir örneğini inşa ediyoruz. Son olarak, Kişi verilerinin yasal olup olmadığını belirlemek için Flunt'ın IsValid özelliğini kullanıyoruz. Verileri doğruysa, IronPDF metodunu çağırarak PDF belgesini oluşturuyoruz. Değilse, doğrulama problemleri konsolda gösterilir.

IronPDF ile PDF oluşturmayı ve Flunt ile veri doğrulamayı birleştirerek, C# uygulamasında kullanıcı girişini değerlendirmek ve PDF belgeleri oluşturmak için hızlı bir iş akışı geliştirdik. Bu yöntem veri bütünlüğünü garanti eder, profesyonel kalite belgeler üretir ve net, okunabilir ve sürdürülebilir kod yazmayı teşvik eder. IronPDF'in yetenekleri hakkında daha fazla bilgi edinmek için doküman sayfasına bakın. Aşağıda örnek kod parçası bulunmaktadır.

using IronPdf;
using System;
using System.Linq;
using System.Text;
using Flunt.Validations;

namespace ConsoleApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // StringBuilder for HTML content
            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!");
                sb.Append("<p>Person is valid!</p>");
            }
            else
            {
                sb.Append("<p>Validation failed: </p>");
                foreach (var notification in contract.Notifications)
                {
                    sb.Append($"- {notification.Key}: {notification.Message}<br>");
                }
            }

            var renderer = new HtmlToPdf();
            // Set HTML content for the page
            var pdfDocument = renderer.RenderHtmlAsPdf(sb.ToString());
            // Save the document
            pdfDocument.SaveAs("output.pdf");
            // Dispose the renderer 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 for HTML content
            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!");
                sb.Append("<p>Person is valid!</p>");
            }
            else
            {
                sb.Append("<p>Validation failed: </p>");
                foreach (var notification in contract.Notifications)
                {
                    sb.Append($"- {notification.Key}: {notification.Message}<br>");
                }
            }

            var renderer = new HtmlToPdf();
            // Set HTML content for the page
            var pdfDocument = renderer.RenderHtmlAsPdf(sb.ToString());
            // Save the document
            pdfDocument.SaveAs("output.pdf");
            // Dispose the renderer 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)
			' StringBuilder for HTML content
			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!")
				sb.Append("<p>Person is valid!</p>")
			Else
				sb.Append("<p>Validation failed: </p>")
				For Each notification In contract.Notifications
					sb.Append($"- {notification.Key}: {notification.Message}<br>")
				Next notification
			End If

			Dim renderer = New HtmlToPdf()
			' Set HTML content for the page
			Dim pdfDocument = renderer.RenderHtmlAsPdf(sb.ToString())
			' Save the document
			pdfDocument.SaveAs("output.pdf")
			' Dispose the renderer 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
$vbLabelText   $csharpLabel

Yukarıdaki koddan yürütme çıktısı aşağıdadır:

Flunt C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - Hem Flunt hem de IronPDF kullanılarak yukarıdaki koddan elde edilen örnek çıktı

Sonuç

IronPDF ve Flunt, belge oluşturma ve veri doğrulama iş akışlarını basitleştirmek için iyi bir şekilde çalışan iki güçlü C# kütüphanesidir. IronPDF'in gelişmiş PDF üretim özellikleri ve Flunt'un güçlü doğrulama yetenekleri ile geliştiriciler, çeşitli uygulamalar için güvenilir, etkili ve yüksek kaliteli çözümler geliştirebilirler. Flunt ve IronPDF, geliştiricilere masaüstü uygulamaları, web uygulamaları veya bulut tabanlı çözümler geliştiriyor olsalar da, kullanıcıların ve paydaşların ihtiyaçlarını karşılayan yüksek kaliteli yazılımlar oluşturmak için gerekli araçları sağlar.

$999 Lite paketi, bir yıllık yazılım desteği, süresiz lisans ve kütüphane güncellemesini içerir. IronPDF, maliyet ve lisans gereksinimlerine yönelik daha fazla bilgi için IronPDF'in ücretsiz lisans detayları sağlar. Iron Software kütüphaneleri hakkında ek bilgi almak için Iron Software resmi web sitesini ziyaret edin.

Sıkça Sorulan Sorular

Flunt C#, uygulamamın doğrulama süreçlerini nasıl geliştirebilir?

Flunt C#, geliştiricilerin okunabilir ve sürdürülebilir bir şekilde karmaşık doğrulama kuralları oluşturmasına olanak tanıyan bir akıcı arayüz sağlayarak doğrulama süreçlerini geliştirir. Zincirleme doğrulama senaryolarını destekler ve ASP.NET Core ve Entity Framework gibi çerçevelerle sorunsuz bir şekilde entegre olur.

Flunt C# için doğrulama ayarlamak için hangi adımlar gereklidir?

Flunt C#'yi doğrulama için ayarlamak için, yeni bir C# projesi oluşturmanız, NuGet'ten Flunt paketini yüklemeniz, gerekli ad alanını içe aktarmanız ve doğrulama kurallarınızı ve mantığınızı oluşturmak için temel sınıfa devralmanız gerekir.

IronPDF, belge oluşturmayı iyileştirmek için Flunt C# ile nasıl entegre olur?

IronPDF, PDF'ler üretmeden önce girdi verilerini doğrulamak için Flunt C# ile birlikte kullanılabilir. Bu, yalnızca geçerli verilerin kullanılmasını sağlayarak sonuç belgelerinin güvenilirliğini artırır. Doğrulamanın ardından, IronPDF size programatik olarak profesyonel kalitede PDF belgeleri oluşturma imkanı tanır.

Flunt C# kullanmanın test odaklı geliştirmede faydaları nelerdir?

Flunt C# doğrulama mantığı ve uygulama kodu arasında net bir ayrım sağlayarak test odaklı geliştirmeyi destekler. Bu ayrım, geliştiricilerin doğrulama kurallarını kolayca yazmasına ve test etmesine olanak tanır, böylece uygulamanın doğruluğunu ve sağlamlığını sağlar.

Flunt C# özel doğrulama kurallarını destekliyor mu?

Evet, Flunt C#, belirli uygulama gereksinimlerini karşılamak için geliştiricilerin özel doğrulama kuralları tanımlamalarına olanak tanır. Bu esneklik, yerleşik doğrulayıcılar tarafından kapsanmayan benzersiz doğrulama senaryolarını ele almaya yardımcı olur.

Bir C# projesine IronPDF kurma işlemi nedir?

IronPDF'yi yüklemek için Visual Studio projenizi açın, 'Araçlar' > 'NuGet Paket Yöneticisi' > 'Paket Yöneticisi Konsolu'na gidin ve Install-Package IronPdf komutunu çalıştırın. Alternatif olarak, IronPDF'yi projenize eklemek için Çözümler için NuGet Paket Yöneticisini kullanabilirsiniz.

Flunt C# içindeki bildirim sistemi ne rol oynar?

Flunt C#'deki bildirim sistemi, doğrulama hatalarını yakalamak ve raporlamak için tasarlanmıştır. Geliştiricilerin hata mesajlarını ve geri bildirimleri toplamasına olanak tanır ve bu, kullanıcıları veya uygulamanın diğer bileşenlerini doğrulama sorunları hakkında bilgilendirmek için kullanılabilir.

Flunt C# açık kaynak projeleri için uygun mu?

Evet, Flunt C# açık kaynaklıdır ve bir geliştirici topluluğu tarafından bakım yapılır. Bu, onu açık kaynak projeleri için güvenilir bir seçim haline getirir, sürekli güncellemeler ve destek sağlar.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ...

Daha Fazla Oku

Iron Destek Ekibi

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