Utilizzo il pacchetto Microsoft.AspNet.StaticFiles
e la configurazione in Startup.cs
come app.UseStaticFiles()
. Come posso cambiare le intestazioni dei file consegnati? Voglio impostare la scadenza della cache ecc. Per immagini, css e js.Modificare le intestazioni dei file statici in Asp.net Core
risposta
È possibile utilizzare StaticFileOptions, che contiene un gestore di eventi che viene chiamato su ogni richiesta di un file statico.
vostri Startup.cs dovrebbe essere simile a questa:
// 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";
}
});
È possibile, ovviamente, modificare il codice qui sopra per verificare il tipo di contenuto e modificare solo le intestazioni per JS o CSS o quello che volete.
Devi scrivere un middleware per fare questo, ho un campione che rimuovere le intestazioni sul mio github https://github.com/aguacongas/chatle
un'occhiata al progetto ChatLe.HttpUtility, è un po 'complicato. si può prendere un aspetto di questa domanda così:
How to do remove some httpresponse headers on each response like Server and ETag?
Tuttavia questo non funzionerà sotto IIS
, perché IIS
gestire statica file stesso. Si lavorerà solo su applicazione stand-alone come kestrel
o firefly
Vuoi dire che tutti e tre di questi non funzioneranno con IIS? O una delle risposte, in particolare? –
in IIS, è possibile aggiungere un file web.config nella cartella wwwroot con le configurazioni di intestazione. Un esempio che controlla le intestazioni di cache per tutti i file:
<?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>
Questo non funzionerà se i siti web ospitano moduli .NET Core (come nel caso di OP), poiché .NET Core non onora 'web.config'. Il modo in cui funziona .NET Core è essenzialmente l'esecuzione del proprio server Web chiamato Kestrel, che si nasconde dietro il modulo IIS + HTTP (noto anche come ANCM, ovvero il modulo principale ASP.NET). https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module –
Se siete alla ricerca di una soluzione che consente di configurare comportamenti diversi per ogni ambiente (sviluppo, produzione & più), che è anche il punto di avere queste impostazioni nel file web.config invece di hard- codificando l'intera roba, potresti considerare il seguente approccio.
Aggiungere la sezione seguente chiave/valore nel appsettings.json di file:
"StaticFiles": {
"Headers": {
"Cache-Control": "no-cache, no-store",
"Pragma": "no-cache",
"Expires": "-1"
}
}
quindi aggiungere il seguente nel metodo del file Startup.cs Configure
conseguenza:
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"];
}
});
Ciò consentirà allo sviluppatore di definire diverse impostazioni della cache utilizzando diversi/multipli/file di impostazioni a cascata (appsettings.json
, appsettings.production.json
e così via) - cosa che si potrebbe fare con il vecchio modello di configurazione web.config
- con quello nuovo di ASP.NET Core.
Per ulteriori informazioni sull'argomento, suggerisco anche di leggere this post e/o questi fantastici articoli dall'ASP ufficiale.NET documenti fondamentali:
in base alla risposta di Josh Mouch sopra, aggiunto codice per determinare se si tratta di un file 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. Come modificare la radice di file statici ASP.NET MVC
- 2. Inserisci/cambia le intestazioni dei file in Eclipse?
- 3. ASP.NET Core Identity 3 Timeout dei cookie
- 4. Request.Files in ASP.NET CORE
- 5. aggiungere intestazioni di risposta ad ASP.NET core Middleware
- 6. Come escludere i file dalla pubblicazione in ASP.NET Core?
- 7. UserHostAddress in Asp.net Core
- 8. django dev server, aggiunta di intestazioni a file statici
- 9. BeginRequest genera file statici nell'app ASP.NET MVC
- 10. @ Html.EnumDropDownListFor in Asp.net Core
- 11. @ Html.Azione in Asp.Net Core
- 12. Come abilitare ClientCache in ASP.NET Core
- 13. Imposta le intestazioni utilizzando pandas.read_csv
- 14. modificare le intestazioni di richiesta in Internet Explorer
- 15. Quale componente sta gestendo l'allocazione dei thread in ASP.NET Core?
- 16. Percorsi di reindirizzamento permanente per file statici in ASP.Net MVC
- 17. Come eseguire il thumbnail dei file statici?
- 18. ASP.NET CORE 1.0, Impersonation
- 19. Blocco ASP.Net Core SignInManagerOnFailure
- 20. Ottimizzazione dei loop "statici"
- 21. Come utilizzare npm con ASP.NET Core
- 22. Instradamento di file statici in ASP.NET MVC 3 come robots.txt
- 23. Come "unire" le configurazioni dei Core Data?
- 24. Proprietà dell'iniezione in Asp.Net Core
- 25. Nessun intellisense in ASP.Net Core
- 26. I metodi non statici possono modificare le variabili statiche
- 27. validatori password asp.net core mvc
- 28. Utilizzo del routing ASP.NET per servire file statici
- 29. Vim: testo a capo ("gq") senza modificare le intestazioni sottolineate
- 30. C'è Session.Abandon() asp.net Core
[Caching delle risorse statiche per sempre con ASP.NET Core] (https://www.softfluent.com/blog/dev/2017/01/08/Caching-static-resources-per sempre-con-ASP-NET-Core) – meziantou