C# asp.net核心中的中间件只能在清除缓存的情况下工作

C# asp.net核心中的中间件只能在清除缓存的情况下工作,c#,asp.net-core,middleware,C#,Asp.net Core,Middleware,我在asp.net内核中编写了一个用于调整图像大小的中间件。但这个中间件只有在浏览器未被缓存的情况下才能工作。第一次调用中间件是正常的,但从第二次调用开始,请求不会进入中间件。在浏览器中清除缓存(ctrl+f5)后,请求进入中间件。这个问题是如何解决的 stratup.cs namespace ImageResizer { public class Startup { public Startup(IConfiguration configuration)

我在asp.net内核中编写了一个用于调整图像大小的中间件。但这个中间件只有在浏览器未被缓存的情况下才能工作。第一次调用中间件是正常的,但从第二次调用开始,请求不会进入中间件。在浏览器中清除缓存(ctrl+f5)后,请求进入中间件。这个问题是如何解决的

stratup.cs

namespace ImageResizer
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {


            var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
            Configuration = builder.Build();
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.Configure<SiteSettings>(Configuration.GetSection(nameof(SiteSettings)));
            services.AddImageResizer();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseImageResizer();
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            //app.UseStaticFiles();
            var pathImage = Configuration.GetSection("SiteSettings").Get<SiteSettings>().ImageLocation;

            app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider =  new PhysicalFileProvider(Path.Combine(pathImage)),
                RequestPath = "/StaticFiles"
            });
            
            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });

        }
    }
}
命名空间ImageResizer
{
公营创业
{
公共启动(IConfiguration配置)
{
var builder=new ConfigurationBuilder().AddJsonFile(“appsettings.json”);
Configuration=builder.Build();
配置=配置;
}
公共IConfiguration配置{get;}
//此方法由运行时调用。请使用此方法将服务添加到容器中。
public void配置服务(IServiceCollection服务)
{
services.AddControllersWithViews();
Configure(Configuration.GetSection(nameof(SiteSettings));
services.AddImageResizer();
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
app.useMageResizer();
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Home/Error”);
}
//app.UseStaticFiles();
var pathImage=Configuration.GetSection(“SiteSettings”).Get().ImageLocation;
app.UseStaticFiles(新的StaticFileOptions
{
FileProvider=新的物理FileProvider(Path.Combine(pathImage)),
RequestPath=“/StaticFiles”
});
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(端点=>
{
endpoints.MapControllerRoute(
名称:“默认”,
模式:“{controller=Home}/{action=Index}/{id?}”);
});
}
}
}

您只需向图像文件添加一些版本控制,如:

<img src="filename.png?v=@Guid.NewGuid().ToString()" />


因此,由于文件路径不同,浏览器将无法从缓存中获取它。但请注意,每次都会从服务器下载所有图像(具有这种版本控制),从而影响页面加载时间和服务器加载。

您应该发布中间件的代码。顺便说一句,这取决于何时运行图像大小调整器。答案应该是浏览器不应该缓存图像的确切时间。那什么时候?如果你能回答这个问题,你将更接近问题的答案。你真的认为浏览器不应该总是缓存图像。所以很简单:)我还问了OP另一个问题,这样他可以通过回答这个问题来回答自己的问题,这是
浏览器什么时候不应该缓存图像?
@appect我给他线索,这样他就可以决定什么时候添加版本控制,什么时候不添加