更改 Asp.net Core 中静态文件的 headers
Change the headers of static files in Asp.net Core
我正在使用包 Microsoft.AspNet.StaticFiles
并在 Startup.cs
中将其配置为 app.UseStaticFiles()
。如何更改传送文件的 headers?我想为图像、css 和 js.
设置缓存过期等
您必须编写一个中间件来执行此操作,我有一个示例可以删除 github https://github.com/aguacongas/chatle
上的 headers
看看ChatLe.HttpUtility这个项目,有点坑爹。你也可以看看这个问题:
How to do remove some httpresponse headers on each response like Server and ETag?
然而,这在 IIS
下不起作用,因为 IIS
自己管理静态文件。它仅适用于 stand-alone 应用程序,如 kestrel
或 firefly
在 IIS 下,您可以使用 header 配置将 web.config 文件添加到您的 wwwroot 文件夹。将控制所有文件的缓存 headers 的示例:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<!-- Disable caching -->
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
您可以使用 StaticFileOptions,它包含一个在每次请求静态文件时调用的事件处理程序。
您的 Startup.cs 应如下所示:
// Add static files to the request pipeline.
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
// Disable caching of all static files.
context.Context.Response.Headers["Cache-Control"] = "no-cache, no-store";
context.Context.Response.Headers["Pragma"] = "no-cache";
context.Context.Response.Headers["Expires"] = "-1";
}
});
当然你可以修改上面的代码来检查内容类型,只修改headers为JS或CSS或任何你想要的。
如果您正在寻找一种允许您为每个环境(开发、生产等)配置不同行为的解决方案,这也是在 [=44= 中进行这些设置的意义所在] 文件而不是硬编码整个东西,你可以考虑以下方法。
在 appsettings.json 文件中添加以下 key/value 部分:
"StaticFiles": {
"Headers": {
"Cache-Control": "no-cache, no-store",
"Pragma": "no-cache",
"Expires": "-1"
}
}
然后在 Startup.cs 文件的 Configure
方法中相应地添加以下内容:
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
// Disable caching for all static files.
context.Context.Response.Headers["Cache-Control"] = Configuration["StaticFiles:Headers:Cache-Control"];
context.Context.Response.Headers["Pragma"] = Configuration["StaticFiles:Headers:Pragma"];
context.Context.Response.Headers["Expires"] = Configuration["StaticFiles:Headers:Expires"];
}
});
这将允许开发人员使用 different/multiple/cascading 设置文件(appsettings.json
、appsettings.production.json
等)定义不同的缓存设置 - 这可以用旧的来完成web.config
配置模式 - 使用 ASP.NET Core 的新配置模式。
有关该主题的更多信息,我还建议阅读 this post 我的博客 and/or 这些来自官方 ASP.NET 核心文档的精彩文章:
根据 Josh Mouch 的上述回答,添加了代码以确定它是否为 pdf 文件
Startup.cs:
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
if(ctx.File.Name.ToLower().EndsWith(".pdf"))
{
ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=86400");
}
else
{
ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=31104000");
}
}
});
我正在使用包 Microsoft.AspNet.StaticFiles
并在 Startup.cs
中将其配置为 app.UseStaticFiles()
。如何更改传送文件的 headers?我想为图像、css 和 js.
您必须编写一个中间件来执行此操作,我有一个示例可以删除 github https://github.com/aguacongas/chatle
上的 headers
看看ChatLe.HttpUtility这个项目,有点坑爹。你也可以看看这个问题:
How to do remove some httpresponse headers on each response like Server and ETag?
然而,这在 IIS
下不起作用,因为 IIS
自己管理静态文件。它仅适用于 stand-alone 应用程序,如 kestrel
或 firefly
在 IIS 下,您可以使用 header 配置将 web.config 文件添加到您的 wwwroot 文件夹。将控制所有文件的缓存 headers 的示例:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<!-- Disable caching -->
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
您可以使用 StaticFileOptions,它包含一个在每次请求静态文件时调用的事件处理程序。
您的 Startup.cs 应如下所示:
// Add static files to the request pipeline.
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
// Disable caching of all static files.
context.Context.Response.Headers["Cache-Control"] = "no-cache, no-store";
context.Context.Response.Headers["Pragma"] = "no-cache";
context.Context.Response.Headers["Expires"] = "-1";
}
});
当然你可以修改上面的代码来检查内容类型,只修改headers为JS或CSS或任何你想要的。
如果您正在寻找一种允许您为每个环境(开发、生产等)配置不同行为的解决方案,这也是在 [=44= 中进行这些设置的意义所在] 文件而不是硬编码整个东西,你可以考虑以下方法。
在 appsettings.json 文件中添加以下 key/value 部分:
"StaticFiles": {
"Headers": {
"Cache-Control": "no-cache, no-store",
"Pragma": "no-cache",
"Expires": "-1"
}
}
然后在 Startup.cs 文件的 Configure
方法中相应地添加以下内容:
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
// Disable caching for all static files.
context.Context.Response.Headers["Cache-Control"] = Configuration["StaticFiles:Headers:Cache-Control"];
context.Context.Response.Headers["Pragma"] = Configuration["StaticFiles:Headers:Pragma"];
context.Context.Response.Headers["Expires"] = Configuration["StaticFiles:Headers:Expires"];
}
});
这将允许开发人员使用 different/multiple/cascading 设置文件(appsettings.json
、appsettings.production.json
等)定义不同的缓存设置 - 这可以用旧的来完成web.config
配置模式 - 使用 ASP.NET Core 的新配置模式。
有关该主题的更多信息,我还建议阅读 this post 我的博客 and/or 这些来自官方 ASP.NET 核心文档的精彩文章:
根据 Josh Mouch 的上述回答,添加了代码以确定它是否为 pdf 文件
Startup.cs:
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
if(ctx.File.Name.ToLower().EndsWith(".pdf"))
{
ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=86400");
}
else
{
ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=31104000");
}
}
});