如何使用 ASP.NET 5 和 MVC 6 缓存静态内容?

How to cache static content using ASP.NET 5 and MVC 6?

之前是通过在web.config文件中添加一些配置实现的,现在这个文件要灭掉

我期待在中间件声明中找到一些方法或属性,但我没有找到:

app.UseStaticFiles();

那么,现在将静态内容缓存为图像、脚本等的过程是什么?

是否有其他中间件可以执行此操作,或者此功能是否尚未在 MVC 6 中实现?

我正在寻找一种方法来将 cache-control、过期等 headers 添加到静态内容。

你的标题说的是压缩,但你的问题body说的是缓存。我假设你的意思是两者。

css/javascript 的缩小已在发布时由 grunt 任务运行器处理。在这之外的缓存和压缩似乎是网络服务器更适合的东西,而不是应用程序层,所以这里有一个很棒的 article 详细介绍了 nginx 的配置以管理 kestrel 的缓存和压缩。

如果你使用的是IIS,你可以直接在上面配置缓存和压缩,这里有一个tutorial。考虑到以前版本的 MVC 在 web.config\system.Webserver 中配置了此功能,它基本上设置了 IIS 配置值,您可能仍然可以使用 web.config 来配置 IIS(仅)。

都是关于 AspNet Core 的中间件;

将以下内容添加到 Startup.cs 文件中的 Configure 方法

app.Use(async (context, next) =>
            {
                context.Response.Headers.Add("Content-encoding", "gzip");
                context.Response.Body = new System.IO.Compression.GZipStream(context.Response.Body,
                    System.IO.Compression.CompressionMode.Compress);
                await next();
                await context.Response.Body.FlushAsync();
            });

顺便说一句,对于缓存,您可以将其添加到 ConfigureServices 方法中

services.AddMvc(options =>
            {
                options.CacheProfiles.Add("Default",
                    new CacheProfile()
                    {
                        Duration = 60
                    });
                options.CacheProfiles.Add("Never",
                    new CacheProfile()
                    {
                        Location = ResponseCacheLocation.None,
                        NoStore = true
                    });
            });

并用

装饰控件
[ResponseCache(CacheProfileName = "Default")]
    public class HomeController : Controller
    {
...