當我們建立一個 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"; }
            });
        // ...
    }
}
這樣就大功告成了

