🚀 جدیدترین قابلیتها در ASP.NET Core نسخهی .NET 10
✅ Validation Support در Minimal APIs
در ASP.NET Core 10 پشتیبانی داخلی از Validation برای Minimal APIها اضافه شده است.
این ویژگی دادههایی که به endpointهای شما ارسال میشوند — شامل query parameters، headers و request bodies را بهصورت خودکار اعتبارسنجی میکند.
برای فعالسازی، کافی است سرویس validation را ثبت کنید:
builder.Services.AddValidation();
سیستم validation بهصورت خودکار نوعهایی را که در handlerهای Minimal API شما استفاده شدهاند شناسایی میکند و با استفاده از attributeهای موجود در فضای نام System.ComponentModel.DataAnnotations آنها را اعتبارسنجی میکند.
میتوانید attributeهای اعتبارسنجی را مستقیماً روی پارامترهای endpoint اعمال کنید:
app.MapPost("/products",
([Range(1, int.MaxValue)] int productId, [Required] string name) =>
{
return TypedResults.Ok(new { productId, name });
});نوعهای record نیز با validation کار میکنند:
public record Product(
[Required] string Name,
[Range(1, 1000)] int Quantity);
app.MapPost("/products", (Product product) =>
{
return TypedResults.Ok(product);
});
وقتی اعتبارسنجی شکست بخورد، runtime بهصورت خودکار پاسخ 400 Bad Request را همراه با جزئیات خطاهای validation بازمیگرداند.
میتوانید برای endpointهای خاص، validation را غیرفعال کنید:
app.MapPost("/products", (int productId, string name) =>
TypedResults.Ok(productId))
.DisableValidation();برای شخصیسازی پاسخهای خطا، میتوانید رابط IProblemDetailsService را پیادهسازی کرده و در Dependency Injection Container ثبت کنید.
این کار امکان تولید پیامهای خطای یکپارچه و کاربرپسند در کل برنامه را فراهم میکند.
🧩 JSON Patch Support در Minimal APIs
برای فعالسازی پشتیبانی از JSON Patch با System.Text.Json، بستهی زیر را نصب کنید:
dotnet add package Microsoft.AspNetCore.JsonPatch.SystemTextJson --prerelease
🔄 Server-Sent Events (SSE)
Server-Sent Events (SSE)
روشی سبک و قابلاعتماد برای ارسال مداوم دادهها از سمت سرور به کلاینتها است — بدون پیچیدگیهای پروتکلهای دوطرفه مانند WebSocket.
در مدل SSE، سرور از طریق یک اتصال HTTP واحد، دادههای بلادرنگ را به مرورگر ارسال میکند. برخلاف مدل request-response سنتی، نیازی نیست کلاینتها مدام از سرور درخواست بفرستند.
برای ارسال SSE، باید یک جریان داده از نوع IAsyncEnumerable<T> فراهم کنید.
🔹 مثال سرویسی برای تولید دادههای قیمت سهام:
public record StockPriceEvent(string Id, string Symbol, decimal Price, DateTime Timestamp);
public class StockService
{
public async IAsyncEnumerable<StockPriceEvent> GenerateStockPrices(
[EnumeratorCancellation] CancellationToken cancellationToken)
{
var symbols = new[] { "MSFT", "AAPL", "GOOG", "AMZN" };
while (!cancellationToken.IsCancellationRequested)
{
var symbol = symbols[Random.Shared.Next(symbols.Length)];
var price = Math.Round((decimal)(100 + Random.Shared.NextDouble() * 50), 2);
var id = DateTime.UtcNow.ToString("o");
yield return new StockPriceEvent(id, symbol, price, DateTime.UtcNow);
await Task.Delay(TimeSpan.FromSeconds(2), cancellationToken);
}
}
}
حالا با استفاده از TypedResults.ServerSentEvents یک endpoint برای استریم داده میسازیم:
builder.Services.AddSingleton<StockService>();
app.MapGet("/stocks", (StockService stockService, CancellationToken ct) =>
{
return TypedResults.ServerSentEvents(
stockService.GenerateStockPrices(ct),
eventType: "stockUpdate"
);
});
کلاینتها میتوانند به این endpoint متصل شوند و بهصورت بلادرنگ بروزرسانیهای قیمت را دریافت کنند.
برای راهنمایی کاملتر دربارهی SSE در ASP.NET Core، میتوانید راهنمای رسمی Microsoft را مطالعه کنید.