⚡️ ترتیب Middleware در ASP.NET Core و نکات مهم
کش کردن و فشردهسازی فایلهای استاتیک 📦💨
برای اینکه فایلهای استاتیک Cacheable و Compressed شوند، ترتیب زیر پیشنهاد میشود:
app.UseResponseCaching();
app.UseResponseCompression();
app.UseStaticFiles();
ءProgram.cs: Middlewareهای رایج در سناریوهای مختلف
1️⃣ مدیریت Exception/Error
🔸️Development:
• UseDeveloperExceptionPage() → نمایش خطاهای runtime اپلیکیشن
• UseDatabaseErrorPage() → نمایش خطاهای database
🔹️Production:
• UseExceptionHandler() → گرفتن خطاهای ایجاد شده در middlewareهای بعدی
• UseHsts() → اضافه کردن هدر Strict-Transport-Security
• UseHttpsRedirection() → ریدایرکت HTTP به HTTPS
2️⃣ فایلهای استاتیک و Policyها
• UseStaticFiles() → پاسخ به درخواستهای فایلهای استاتیک و کوتاه کردن pipeline
⚠️ توجه: هیچ بررسی authorization انجام نمیدهد. تمام فایلها، از جمله wwwroot، عمومی هستند.
• UseCookiePolicy() → رعایت GDPR
3️⃣ Routing و Security
• UseRouting() → مسیردهی درخواستها
• UseAuthentication() → بررسی هویت کاربر
• UseAuthorization() → اجازه دسترسی به منابع امن
⚠️توجه: Authentication short-circuit نمیکند؛ فقط هویت را بررسی میکند. مجوز دسترسی بعد از انتخاب Controller یا Razor Page اعمال میشود.
4️⃣ Session و Endpoint
• UseSession() → مدیریت وضعیت session
اگر از session استفاده میکنید، حتماً بعد از Cookie Policy و قبل از MVC Middleware قرار دهید.
• MapRazorPages() → اضافه کردن Endpointهای Razor Pages به pipeline
مثال کد کامل Program.cs
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
app.MapRazorPages();
نکات کلیدی 📝
• ءUseExceptionHandler → اولین middleware است، پس همه Exceptionهای بعدی را میگیرد.
• ءStatic File Middleware → زود فراخوانی میشود تا درخواستها را هندل کرده و pipeline را کوتاه کند.
• ءSecurity → فایلهای استاتیک بدون بررسی authorization هستند. برای ایمنسازی، به Secure Static Files در ASP.NET Core
مراجعه کنید.
Authentication vs Authorization
• Authentication → بررسی هویت
• Authorization → بعد از انتخاب Controller/Razor Page اعمال میشود
ترتیب فشردهسازی فایلها
اگر Static Files قبل از ()UseResponseCompression بیاید → فایلهای استاتیک فشرده نمیشوند، اما پاسخ Razor Pages فشرده میشود:
app.UseStaticFiles();
app.UseRouting();
app.UseResponseCompression();
app.MapRazorPages();
🔖هشتگها:
#ASPNETCore #Middleware #Pipeline #DotNe #RequestPipeline #CSharp