[小菜一碟] 為我們在 ASP.NET Core 的靜態檔案加上 Cache-Control

當我們建立一個 ASP.NET Core Web 應用程式專案的時候,預設在 Startup.cs 中就會呼叫 UseStaticFiles() 使用 StaticFileMiddleware,讓專案中的靜態檔案可以透過 HTTP 被存取到,現在我想要將這些靜態檔案 Cache 在 CDN 上,我需要在 Response Headers 裡面加上 Cache-Control: public, max-age=n,我們來看要怎麼做?

我們可以利用 UseStaticFiles() 的一個多載方法 UseStaticFiles(StaticFileOptions options),傳入 StaticFileOptions 參數,並指定 OnPrepareResponse 屬性的值,在 Response Headers 中加入 Cache-Control 跟要設定的值。

public class Startup
{
    // ...
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // ...

        app.UseStaticFiles(
            new StaticFileOptions
            {
                OnPrepareResponse = ctx => { ctx.Context.Response.Headers[HeaderNames.CacheControl] = "public, max-age=86400"; }
            });

        // ...
    }
}

這樣就大功告成了

參考資料

C# 指南ASP.NET 教學ASP.NET MVC 指引
Azure SQL Database 教學SQL Server 教學Xamarin.Forms 教學