将HTTP头添加到ASP.NET核心中的静态文件


通常,静态文件(如JavaScript,CSS,图像等)在第一次请求后缓存在客户端上。但有时,您需要禁用缓存或添加特殊的缓存处理。

若要在ASP.NET核心应用程序中提供静态文件,请使用StaticFileMiddleware

app.UseStaticFiles();


这个扩展方法有两个重载。其中一个需要StaticFileOptions实例,在本例中它是我们的朋友。此选项有一个名为OnPrepareResponse类型的Action<StaticFileResponseContext>。在此操作中,您可以访问HttpContext还有更多。让我们看看将缓存生存期设置为12小时是什么样子的:

app.UseStaticFiles(new StaticFileOptions()
{
    OnPrepareResponse = context =>
    {
        context.Context.Response.Headers["Cache-Control"] = 
                "private, max-age=43200";

        context.Context.Response.Headers["Expires"] = 
                DateTime.UtcNow.AddHours(12).ToString("R");
    }
});


StaticFileResponseContext,您还可以访问当前处理文件的文件。有了这些信息,就可以仅针对特定文件或文件类型操纵HTTP头。

这种方法确保客户机不会使用太多过时的文件,而是使用缓存的版本。我们在一个ASP.NET核心单页应用程序中使用这一点,该应用程序使用许多JavaScript和HTML模板文件。结合持续部署,我们需要确保应用程序使用最新的文件。