Jim*_*Jim 4 c# asp.net-mvc asp.net-core-mvc kestrel-http-server asp.net-core
我已将 dotnet core 中间件配置为输出 Cache-Control 标头。我希望缓存所有静态内容,但最特别的是几个 .png 文件。缓存头没有被输出?我正在使用 dotnet core 1.1.1。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = _ =>
{
var headers = _.Context.Request.GetTypedHeaders();
headers.CacheControl = new CacheControlHeaderValue
{
MaxAge = TimeSpan.FromHours(12)
};
}
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseIdentity();
// Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715
app.UseMvc(routes =>
{
routes.MapRoute(
"default",
"{controller=Site}/{action=Site}/{id?}");
});
}
Run Code Online (Sandbox Code Playgroud)
代码被忽略,如下面的屏幕截图所示。
我也尝试过像这样显式添加标头,但出现错误表明标头已经存在。
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = _ =>
{
_.Context.Request.Headers.Add("Cache-Control", "public,max-age=60");
}
});
Run Code Online (Sandbox Code Playgroud)
不知何故,它被吃掉了。如果我设置断点,就会调用代码。
您尝试操纵请求标头。
var headers = _.Context.Request.GetTypedHeaders();
headers.CacheControl = new CacheControlHeaderValue
{
MaxAge = TimeSpan.FromHours(12)
};
Run Code Online (Sandbox Code Playgroud)
浏览器需要响应标头,而不是请求标头。将缓存控制添加到响应标头。直接或通过 CacheHeader 属性并不重要。
_.Context.Response.Headers.Append("Cache-Control", string.Format("public,max-age={0}", TimeSpan.FromHours(12).TotalSeconds));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8813 次 |
| 最近记录: |