هنگام کار با حداقل API در ASP.NET Core 6 از FluentValidation برای اعتبارسنجی کلاس های مدل خود استفاده کنید.
هنگام کار با برنامههای کاربردی در ASP.NET Core 6، اغلب میخواهید مدلهای خود را اعتبارسنجی کنید تا اطمینان حاصل کنید که دادههای موجود در آنها با قوانین اعتبارسنجی از پیش تعریفشده مطابقت دارد. اعتبار مدل را وارد کنید.
ما در مقاله قبلی بحث کردهایم که چگونه میتوانیم با حداقل API شروع کنیم. این مقاله نحوه استفاده از اعتبارسنجی مدل در حداقل APIها را مورد بحث قرار میدهد.
برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخهای ندارید، میتوانید Visual Studio 2022 را از اینجا بارگیری کنید.
یک پروژه ASP.NET Core minimal Web API در Visual Studio 2022 ایجاد کنید
ابتدا، اجازه دهید یک پروژه ASP.NET Core در Visual Studio 2022 ایجاد کنیم. با دنبال کردن این مراحل، یک پروژه ASP.NET Core Web API 6 جدید در Visual Studio 2022 ایجاد می کنیم:
- Visual Studio 2022 IDE را راه اندازی کنید.
- روی “ایجاد پروژه جدید” کلیک کنید.
- در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
- بعدی را کلیک کنید.
- در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
- به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
- بعدی را کلیک کنید.
- در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، علامت کادری را که میگوید «استفاده از کنترلکنندهها…» را بردارید، زیرا در این مثال از حداقل API استفاده خواهیم کرد. “نوع احراز هویت” را به عنوان “هیچ” (پیشفرض) بگذارید.
- مطمئن شوید که چک باکسهای «Enable Docker»، «Configure for HTTPS» و «Enable Open API Support» علامت نخورده باشند زیرا ما در اینجا از هیچ یک از این ویژگیها استفاده نخواهیم کرد.
- روی ایجاد کلیک کنید.
این یک پروژه ASP.NET Core 6 Web API جدید در Visual Studio 2022 ایجاد میکند. ما از این پروژه برای کار با اعتبارسنجی مدل در بخشهای بعدی این مقاله استفاده خواهیم کرد.
اعتبار سنجی مدل چیست؟ چرا به آن نیاز است؟
اعتبار سنجی مدل تکنیکی است که برای تأیید وضعیت مدل استفاده می شود، به عنوان مثال، برای تعیین اینکه آیا داده های مدل با قوانین تعریف شده مطابقت دارند یا خیر. اجازه دهید این را با یک مثال درک کنیم. فرض کنید یک کلاس مدل به نام Product دارید که یکی از فیلدها کد محصول است.
حالا فرض کنید یک ویژگی را در کلاس Product تعریف کرده اید که به موجب آن ویژگی Product Code نمی تواند مقداری بیشتر از پنج کاراکتر داشته باشد. اگر نمونه ای از این کلاس مدل ایجاد کنید و بیش از پنج کاراکتر را به ویژگی Product Code اختصاص دهید، اعتبارسنجی مدل برای این شی ناموفق خواهد بود.
هیچ پشتیبانی داخلی برای اعتبارسنجی مدل در حداقل APIها وجود ندارد (برخلاف ASP.NET Core MVC و Razor Pages). بنابراین، باید کد سفارشی خود را بنویسید تا مدلها را در حداقل برنامههای API خود تأیید کنید.
بسته FluentValidation.AspNetCore NuGet را نصب کنید
در این مقاله، از کتابخانه اعتبارسنجی FluentValidation استفاده خواهیم کرد که به عنوان موجود است یک بسته NuGet FluentValidation از یک API روان و عبارات لامبدا برای ایجاد قوانین اعتبارسنجی داده استفاده میکند.
اکنون بسته FluentValidation.AspNetCore NuGet را به پروژه خود اضافه کنید. برای انجام این کار، پروژه را در پنجره Solution Explorer انتخاب کنید، سپس راست کلیک کرده و “Manage NuGet Packages” را انتخاب کنید. در پنجره NuGet Package Manager، بسته FluentValidation.AspNetCore را جستجو کرده و آن را نصب کنید.
همچنین، میتوانید بسته را از طریق کنسول NuGet Package Manager با وارد کردن دستور زیر نصب کنید.
PM> Install-Package FluentValidation.AspNetCore
کلاس مدل را ایجاد کنید
یک کلاس جدید با نام Product در فایلی با همین نام و پسوند cs ایجاد کنید و کد زیر را در آنجا وارد کنید.
public class Product
{
public int Id { get; set; }
public string Code { get; set; }
public int Quantity { get; set; }
public double Price { get; set; }
}
این کلاس مدلی است که برای اعتبارسنجی استفاده خواهیم کرد.
کلاس Product Validator را ایجاد کنید
حالا فرض کنید کلاس Product به یک اعتبار سنج نیاز دارد، به عنوان مثال، کلاسی که ویژگی های کلاس Product را تایید می کند. همانطور که در قطعه کد زیر نشان داده شده است، میتوانید با گسترش کلاس انتزاعی به نام AbstractValidator، یک اعتبارسنجی سفارشی ایجاد کنید.
public class ProductValidator : AbstractValidator<Product>
{
public ProductValidator()
{
RuleFor(x => x.Id).NotNull();
RuleFor(x => x.Code).Length(5);
RuleFor(x => x.Quantity).NotNull();
RuleFor(x => x.Price).InclusiveBetween(50.00, 250.00);
}
}
اینترفیس IProductRepository
ایجاد کنید
یک مخزن در یک برنامه کاربردی استفاده می شود تا داده ها را در یک ذخیره داده مانند پایگاه داده یا یک سیستم فایل حفظ کند. در این مثال، ما یک مخزن ساده ایجاد خواهیم کرد که دارای روشی به نام AddProduct است، اما از آنجایی که در اینجا بر اعتبارسنجی مدل تمرکز می کنیم، منطق اضافه کردن یک رکورد محصول به پایگاه داده را وارد نمی کنیم.
یک رابط به نام IProductRepository ایجاد کنید و کد زیر را وارد کنید.
public interface IProductRepository
{
public void AddProduct(Product product);
}
کلاس ProductRepository را ایجاد کنید
کلاس ProductRepository رابط IProductRepository را مطابق شکل زیر پیاده سازی می کند.
public class ProductRepository : IProductRepository
{
public void AddProduct(Product product)
{
//Write your code here to add a product record to the database
}
}
کلاس های اعتبار سنجی و مخزن را در Program.cs ثبت کنید
نوع ProductValidator و ProductRepository را با استفاده از کد زیر در فایل Program.cs ثبت کنید.
builder.Services.AddScoped<IValidator<Product>, ProductValidator>();
builder.Services.AddScoped<IProductRepository, ProductRepository>();
یک نقطه پایانی HttpPost در Program.cs ایجاد کنید
اکنون کد زیر را در فایل Program.cs بنویسید تا نقطه پایانی HttpPost ایجاد شود.
app.MapPost("/product", async (IValidator<Product> validator, IProductRepository repository, Product product) =>
{
var validationResult = await validator.ValidateAsync(product);
if (!validationResult.IsValid)
{
return Results.ValidationProblem(validationResult.ToDictionary());
}
repository.AddProduct(product);
return Results.Created($"/{product.Id}", product);
});
به نحوه ارسال پارامترهای اعتبار سنجی، مخزن و محصول توجه کنید. متد ValidateAsync برای تأیید اعتبار نمونه محصول فراخوانی می شود.
مثال اعتبارسنجی مدل کامل
کد منبع کامل فایل Program.cs برای مرجع شما در زیر آورده شده است.
using FluentValidation;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddScoped<IValidator<Product>, ProductValidator>();
builder.Services.AddScoped<IProductRepository, ProductRepository>();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.MapPost("/product", async (IValidator<Product> validator, IProductRepository repository, Product product) =>
{
var validationResult = await validator.ValidateAsync(product);
if (!validationResult.IsValid)
{
return Results.ValidationProblem(validationResult.ToDictionary());
}
repository.AddProduct(product);
return Results.Created($"/{product.Id}", product);
});
app.Run();
برنامه را اجرا کنید
در آخر، اجازه دهید برنامه را اجرا کنیم و نقطه پایانی HttpPost را از Postman فراخوانی کنیم تا اعتبار مدل را در عمل ببینیم. شکل ۱ خروجی پس از اعتبارسنجی مدل را نشان می دهد. به پیام های خطا در پاسخ توجه کنید.
شکل ۱: اعتبارسنجی مدل در یک API حداقل در ASP.NET Core 6 با استفاده از کتابخانه FluentValidation.
همچنین میتوانید اعتبارسنجیهای سفارشی را با استفاده از رابط IValidatableObject اعمال کنید. این رابط شامل متدی به نام Validate است که باید خودتان آن را پیاده سازی کنید. برای انجام این کار، یک کلاس مدل ایجاد می کنید که این رابط و متد Validate را پیاده سازی می کند. در پست آینده در اینجا درباره استفاده از IValidatableObject بحث خواهم کرد.
پست های مرتبط
از اعتبارسنجی مدل در حداقل APIها در ASP.NET Core 6 استفاده کنید
از اعتبارسنجی مدل در حداقل APIها در ASP.NET Core 6 استفاده کنید
از اعتبارسنجی مدل در حداقل APIها در ASP.NET Core 6 استفاده کنید