Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何将css、js或图像文件缓存到asp.net core_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Asp.net core 如何将css、js或图像文件缓存到asp.net core

Asp.net core 如何将css、js或图像文件缓存到asp.net core,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,间歇性代理导致我的页面与我部署的asp.net核心站点缓存在一起。web服务器未缓存页面 我添加了请求和响应缓存以防止此代理导致的任何缓存 在myStartup.cs中 app.UseStaticFiles(); app.UseIdentity(); app.Use(async (context, next) => { context.Response.Headers.Append("Cache-C

间歇性代理导致我的页面与我部署的asp.net核心站点缓存在一起。web服务器未缓存页面

我添加了请求和响应缓存以防止此代理导致的任何缓存

在my
Startup.cs中

        app.UseStaticFiles();

        app.UseIdentity();

        app.Use(async (context, next) =>
        {
            context.Response.Headers.Append("Cache-Control", "no-cache");
            context.Response.Headers.Append("Cache-Control", "private, no-store");
            context.Request.Headers.Append("Cache-Control", "no-cache");
            context.Request.Headers.Append("Cache-Control", "private, no-store");
            await next();
        });
我可以在fiddler中看到这些无缓存头已经添加到我的页面以及javascript文件、css文件和图像文件中

  • 如何将此无缓存头限制为仅适用于asp.net mvc页面,以便这些无缓存头不会出现在非页面文件(如js、css和图像文件)的fiddler中

  • 是否有一种方法可以使css和js文件的HTTP请求不检查每个请求的服务器上是否存在该文件,而只使用浏览器版本来获取这些文件。我问这个问题的原因是,在Fiddler中,在重载(1000个用户)的情况下,我注意到我的css、js和图像文件的HTTPGETs有404个错误,所以我试图限制对这些资源的请求数量。当请求成功(未加载)时,我得到304个响应(未修改)。没有办法告诉浏览器首先不要发出请求并使用本地缓存版本


  • 这里有一个适合您的方法。此示例将css和js文件设置为由浏览器缓存7天,并将非css、js和图像设置为没有缓存头。另一个注意事项是,只需要在响应上设置缓存控制头,即Asp.NET Core

            app.Use(async (context, next) =>
            {
                string path = context.Request.Path;
    
                if(path.EndsWith(".css") || path.EndsWith(".js")) {
    
                    //Set css and js files to be cached for 7 days
                    TimeSpan maxAge = new TimeSpan(7, 0, 0, 0);     //7 days
                    context.Response.Headers.Append("Cache-Control", "max-age="+ maxAge.TotalSeconds.ToString("0")); 
    
                } else if(path.EndsWith(".gif") || path.EndsWith(".jpg") || path.EndsWith(".png")) {
                    //custom headers for images goes here if needed
    
                } else {
                    //Request for views fall here.
                    context.Response.Headers.Append("Cache-Control", "no-cache");
                    context.Response.Headers.Append("Cache-Control", "private, no-store");
    
                }
                await next();
            });
    

    通过app.UseStaticFiles的另一个解决方案

     app.UseStaticFiles(new StaticFileOptions
            {
                OnPrepareResponse = ctx =>
                {
                    const int durationInSeconds = 60 * 60 * 24;
                    ctx.Context.Response.Headers[HeaderNames.CacheControl] =
                        "public,max-age=" + durationInSeconds;
                }
            });
    
    您必须添加此库

    using Microsoft.Net.Http.Headers;
    

    我不确定我是否理解。你能重述问题的第一部分吗?我重述了问题。谢谢!我根据更新的问题更新了答案。
    using Microsoft.Net.Http.Headers;