8

在 ASP.net 4.5 中,我们曾经能够通过在 web.config 中添加“ClientCache”来启用静态资源的过期标头(反过来,启用浏览器缓存),例如:

<staticcontent>
  <clientcache cachecontrolmode="UseMaxAge" cachecontrolmaxage="365.00:00:00" />
</staticcontent>

如http://madskristensen.net/post/cache-busting-in-aspnet中所引用

当我们没有 web.config 和 Startup.cs 时,我们现在如何在 ASP.net 5 中执行此操作?

4

3 回答 3

13

在 Startup.cs > Configure(IApplicationBuilder applicationBuilder, .....)

applicationBuilder.UseStaticFiles(new StaticFileOptions
{
     OnPrepareResponse = context => 
     context.Context.Response.Headers.Add("Cache-Control", "public, max-age=2592000")
});
于 2015-12-02T07:14:57.760 回答
1

如果您使用的是 MVC,则可以在您的操作上使用ResponseCacheAttribute来设置客户端缓存标头。您还可以使用ResponseCacheFilter

于 2015-08-21T17:01:58.480 回答
1

你用什么服务器?

  • 如果您使用 IIS,您仍然可以在 wwwroot 文件夹中使用 web.config。

  • 如果您使用 kestrel,则还没有内置解决方案。但是,您可以编写一个添加特定缓存控制标头的中间件。或者使用 nginx 作为反向代理。

中间件:

未经测试(!),就在我的头上,你可以写这样的东西:

public sealed class CacheControlMiddleWare
{
    readonly RequestDelegate _next;
    public CacheControlMiddleWare(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if (context.Request.Path.Value.EndsWith(".jpg")
        {
            context.Response.Headers.Add("Cache-Control", new[]{"max-age=100"});
        }
        await _next(context);
    }
}

nginx 作为反向代理:

http://mjomaa.com/computer-science/frameworks/asp-net-mvc/141-how-to-combine-nginx-kestrel-for-production-part-i-installation

除此之外,我还为响应缓存写了一些注释:

http://mjomaa.com/computer-science/frameworks/asp-net-mvc/153-output-response-caching-in-asp-net-5

于 2015-09-01T18:58:55.163 回答