我正在使用軟件包Microsoft.AspNet.StaticFiles
並在Startup.cs
中將其配置爲app.UseStaticFiles()
。我如何更改交付文件的標題?我想設置緩存過期等圖像,CSS和JS。在Asp.net Core中更改靜態文件的標題
回答
您可以使用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";
}
});
你可以,當然,修改上面的代碼來檢查的內容類型,只修改標題爲JS或CSS或任何你想要的。
你必須寫一箇中間件要做到這一點,我已經是在ChatLe.HttpUtility項目中刪除我的github頭https://github.com/aguacongas/chatle
看樣品,這是一個有點棘手。你可以看看這個問題還有:
How to do remove some httpresponse headers on each response like Server and ETag?
但是這不會IIS
下工作,因爲IIS
管理靜態文件本身。它僅適用於獨立應用程序,如kestrel
或firefly
你的意思是所有這三個在IIS下無法工作?或者其中一個答案,具體是什麼? – 2016-01-11 15:31:16
在IIS下,可以使用標題配置將web.config文件添加到wwwroot文件夾。將控制緩存頭的所有文件的一個例子:
<?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>
如果網站託管.NET核心模塊(例如OP),那麼這是行不通的,因爲.NET核心不支持'web.config'。 .NET Core的工作方式基本上是運行他們自己的Web服務器Kestrel,它隱藏在IIS + HTTP模塊(又名ANCM,又名ASP.NET核心模塊)之後。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module – 2017-02-01 06:46:18
如果你正在尋找一個解決方案,允許您爲每個環境(開發,生產&更多),這也是在的web.config文件具有這些設置的點,而不是硬配置不同的行爲編碼整個東西,你可以考慮以下方法。
添加下面的鍵/值節的appsettings.json文件:
"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"];
}
});
這將允許開發人員使用不同/多個/級聯設置文件定義不同的緩存設置(appsettings.json
,appsettings.production.json
等) - 這是可以用舊的web.config
配置模式完成的事情 - 使用ASP.NET Core的新模式。
有關該主題的其他信息,我還建議閱讀this post和/或官方ASP的這些偉大的文章。NET核心文檔:
基於上述喬希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");
}
}
});
- 1. 更改ASP.NET Core中的配置文件
- 2. 動態更改靜態單元格上的節標題文本
- 3. 更新ASP.NET Core 2.0中的標識
- 4. RnR:Spree在靜態頁面上更改頁面標題
- 5. 更改消息框的標題在ASP.NET
- 6. 如何更改.NET CORE中的默認ASP.NET標識表名稱?
- 7. 如何更改默認路由點靜態HTML文件在asp.net mvc的
- 8. 如何更改ASP.NET MVC中靜態腳本文件的內容類型?
- 9. 如何在viewForHeaderInSection的tableview中動態更改標題標題?
- 10. 服務Javascript/CSS文件時的ASP.NET MVC更改響應標題
- 11. 在asp.net中更改光標
- 12. ASP.NET Core with Angular不更新更改
- 13. Django更新靜態文件
- 14. 從Flask中的配置更改靜態文件夾
- 15. 如何添加標題到express/nodejs中的靜態gzip文件?
- 16. 使用ASP.net MVC3每客戶端更改標籤和靜態文本
- 17. 從ASP.NET中的靜態方法更改顯示的數據
- 18. 鏈接到Expressjs中的靜態文件中的靜態文件
- 19. 更改圖像滑塊標題爲靜態
- 20. 如何通過靜態變量訪問ASP.NET Core中的會話?
- 21. 發送靜態文件,但有時會更改文件
- 22. 304在靜態文件上未修改
- 23. 如何在ASP.NET Core中下載文件
- 24. 在Windows 8中動態更改標題文本
- 25. 關於加載靜態文件的azure問題的Asp.net核心
- 26. 在ASP.NET Core 1.0中發佈後修改appsettings.Production.json文件?
- 27. 當我在R中讀取文件時,標題中的更改?
- 28. 靜態變量作爲Grdiv視圖中TemplateFields的標題asp.net
- 29. 如何動態更改ASP.NET MVC中/ Content目錄中的文件?
- 30. 在robots.txt中路由ASP.NET MVC 3中的靜態文件
[使用ASP.NET Core永遠緩存靜態資源](https://www.softfluent.com/blog/dev/2017/01/08/Caching-static-resources-forever-with-ASP-Core) – meziantou 2017-02-28 10:04:07