پشتیبانی از اعتبارسنجی در APIهای حداقلی (Minimal APIs) در ASP.NET Core 10
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۱/۳۱ ۰۸:۳۱
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
var builder = WebApplication.CreateBuilder(args); builder.Services.AddValidation(); var app = builder.Build(); app.Run();
<PropertyGroup> <!-- Enable the generation of interceptors for the validation attributes --> <InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces> </PropertyGroup>
[Required]، [StringLength] یا ویژگیهای سفارشی تعریف میشوند. این ویژگیها میتوانند بر پارامترهای ورودی یا مدلهای داده اعمال شوند. بهعنوان مثال، کد زیر یک نقطه پایانی POST را نشان میدهد که از اعتبارسنجی برای بررسی یک شناسه محصول زوج و نام الزامی استفاده میکند:app.MapPost("/products", ([EvenNumber(ErrorMessage = "Product ID must be even")] int productId, [Required] string name) =>
TypedResults.Ok(productId));[EvenNumber] یک ویژگی سفارشی است که بررسی میکند آیا شناسه محصول زوج است یا خیر، و [Required] اطمینان میدهد که نام محصول خالی نباشد. در صورت نقض هر یک از این قوانین، پاسخ خطای 400 با جزئیات خطا بازگردانده میشود.DisableValidation امکانپذیر است. بهعنوان مثال:app.MapPost("/products", ([EvenNumber(ErrorMessage = "Product ID must be even")] int productId, [Required] string name) =>
TypedResults.Ok(productId))
.DisableValidation();IValidatableObject، منطق اعتبارسنجی پیچیدهتری را پیادهسازی کنند. برای مثال، میتوان یک ویژگی سفارشی برای بررسی زوج بودن یک عدد تعریف کرد:public class EvenNumberAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value is int number && number % 2 == 0)
{
return ValidationResult.Success;
}
return new ValidationResult(ErrorMessage);
}
}IValidatableObject، میتوان منطق اعتبارسنجی را مستقیماً در مدل داده پیادهسازی کرد:public class Product : IValidatableObject
{
[Required]
public string Name { get; set; }
public int ProductId { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (ProductId % 2 != 0)
{
yield return new ValidationResult("Product ID must be even.", new[] { nameof(ProductId) });
}
}
}Microsoft.AspNetCore.OpenApi پشتیبانی میکند. این قابلیت به توسعهدهندگان اجازه میدهد تا نقاط پایانی خود را با مستندات دقیق و اعتبارسنجی خودکار همراه کنند، که بهویژه در محیطهای تولید با کارایی بالا مفید است.IValidatableObject پشتیبانی میکنند. بااینحال، APIهای حداقلی به دلیل ساختار سبکتر و نیاز به کد کمتر، برای پروژههایی که سادگی و عملکرد بالا در اولویت هستند، مناسبترند. این انسجام در رفتار اعتبارسنجی بین دو رویکرد، انتقال دانش و مهارتها را برای توسعهدهندگان آسانتر میکند.AddValidation گرفته تا امکان غیرفعالسازی اعتبارسنجی برای نقاط پایانی خاص و پشتیبانی از پروژههای AOT بومی، این ویژگی انعطافپذیری و قدرت زیادی را به ارمغان میآورد. توسعهدهندگان .NET میتوانند با بهرهگیری از این ابزارها، برنامههایی مقیاسپذیر و قابلاعتماد بسازند که نیازهای مدرن توسعه وب را برآورده کنند.