FluentValidation स्ट्रॉन्गली-टाइप्ड वैलिडेशन नियम बनाने के लिए एक .NET लाइब्रेरी है। यह वैलिडेशन नियम बनाने के लिए फ्लुएंट इंटरफेस और लैम्ब्डा एक्सप्रेशन्स का उपयोग करता है। यह आपके डोमेन कोड को साफ करने और अधिक सामंजस्यपूर्ण बनाने में मदद करता है, साथ ही आपको वैलिडेशन तर्क के लिए एक ही स्थान देता है।
पैकेज इंस्टॉलेशन
<PackageReference Include="FluentValidation" Version="11.9.0" />
// या
dotnet add package FluentValidation
उदाहरण: व्यापक Person वैलिडेटर
using FluentValidation;
using FluentValidation.Results;
static class Program
{
static void Main(string[] args)
{
List<string> errors = new List<string>();
PersonModel person = new PersonModel
{
FirstName = "", // खाली - अमान्य
LastName = "S", // बहुत छोटा - अमान्य
AccountBalance = 100,
DateOfBirth = DateTime.Now.Date
};
PersonValidator validator = new PersonValidator();
ValidationResult results = validator.Validate(person);
if (!results.IsValid)
{
foreach (ValidationFailure failure in results.Errors)
{
errors.Add(failure.ErrorMessage);
}
}
foreach (var item in errors)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public decimal AccountBalance { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class PersonValidator : AbstractValidator<PersonModel>
{
public PersonValidator()
{
RuleFor(p => p.FirstName)
.Cascade(CascadeMode.StopOnFirstFailure) // पहली विफलता पर रुकें
.NotEmpty().WithMessage("{PropertyName} is Empty")
.Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
.Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");
RuleFor(p => p.LastName)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("{PropertyName} is Empty")
.Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
.Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");
}
protected bool BeAValidName(string name)
{
if (string.IsNullOrEmpty(name)) return false;
name = name.Replace(" ", "").Replace("-", "");
return name.All(char.IsLetter);
}
}
आउटपुट
First Name is Empty
Length (1) of Last Name Invalid
मुख्य वैलिडेटर्स
| वैलिडेटर | विवरण |
|---|---|
NotEmpty() | नल, खाली स्ट्रिंग, डिफ़ॉल्ट मान नहीं |
NotNull() | नल नहीं (खाली स्ट्रिंग अनुमत) |
Length(min, max) | स्ट्रिंग/कलेक्शन लंबाई रेंज |
MinimumLength(n) / MaximumLength(n) | न्यूनतम/अधिकतम लंबाई |
EmailAddress() | ईमेल फॉर्मेट वैलिडेशन |
Matches(regex) | रेजेक्स पैटर्न मिलान |
Must(predicate) | कस्टम वैलिडेशन लॉजिक |
InclusiveBetween(min, max) | संख्या रेंज (समावेशी) |
GreaterThan/LessThan | तुलना वैलिडेशन |
CreditCard() | क्रेडिट कार्ड लुहन एल्गोरिदम |
ScalePrecision(precision, scale) | दशमलव सटीकता/स्केल |
कैस्केड मोड्स
// StopOnFirstFailure - पहला विफल होने पर रुकें (डिफ़ॉल्ट व्यवहार बदलने के लिए)
RuleFor(x => x.Name)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty()
.Length(2, 50);
// Continue - सभी नियम चलाएं (सभी त्रुटियां एकत्र करें)
RuleFor(x => x.Name)
.Cascade(CascadeMode.Continue)
.NotEmpty()
.Length(2, 50);
सशर्त वैलिडेशन
RuleFor(p => p.SpouseName)
.NotEmpty()
.When(p => p.MaritalStatus == MaritalStatus.Married)
.WithMessage("Spouse name required when married");
RuleFor(p => p.DrivingLicense)
.NotEmpty()
.Unless(p => p.Age < 18)
.WithMessage("Driving license required for adults");
ASP.NET Core एकीकरण
// Program.cs
builder.Services.AddControllers()
.AddFluentValidationAutoValidation()
.AddFluentValidationClientsideAdapters();
builder.Services.AddValidatorsFromAssemblyContaining<Program>();
FluentValidation के लाभ
- पठनीयता: फ्लुएंट सिंटैक्स आत्म-दस्तावेजी है
- परीक्षण योग्यता: वैलिडेटर्स को स्वतंत्र रूप से यूनिट टेस्ट किया जा सकता है
- पृथक्करण: वैलिडेशन तर्क मॉडल से अलग
- पुन: उपयोगिता: वैलिडेटर्स को कई मॉडल्स में साझा किया जा सकता है
- एक्सटेंसिबिलिटी: कस्टम वैलिडेटर्स आसानी से बनाए जा सकते हैं
- क्लाइंट-साइड: ASP.NET Core में अनोटेशन्स के लिए स्वचालित समर्थन