C# asp.net核心中的中间件只能在清除缓存的情况下工作
我在asp.net内核中编写了一个用于调整图像大小的中间件。但这个中间件只有在浏览器未被缓存的情况下才能工作。第一次调用中间件是正常的,但从第二次调用开始,请求不会进入中间件。在浏览器中清除缓存(ctrl+f5)后,请求进入中间件。这个问题是如何解决的 stratup.csC# 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)
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我给他线索,这样他就可以决定什么时候添加版本控制,什么时候不添加