Używam pakietu Microsoft.AspNet.StaticFiles
i konfiguruję go w Startup.cs
jako app.UseStaticFiles()
. Jak mogę zmienić nagłówki dostarczonych plików? Chcę ustawić datę ważności cache dla obrazów, css i js.Zmiana nagłówków plików statycznych w Asp.net Core
Odpowiedz
Można użyć StaticFileOptions, który zawiera moduł obsługi zdarzeń, która jest wywoływana na każde żądanie pliku statycznego.
Twoje Startup.cs powinien wyglądać mniej więcej tak:
// 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";
}
});
Można oczywiście zmodyfikować powyższy kod, aby sprawdzić typ zawartości i modyfikować tylko nagłówki JS lub CSS lub cokolwiek chcesz.
Trzeba napisać middleware, aby to zrobić, mam próbki, które usuwają nagłówki na moim github https://github.com/aguacongas/chatle
spojrzeć na projekt ChatLe.HttpUtility, to trochę skomplikowane. można spojrzeć na to pytanie, a także:
How to do remove some httpresponse headers on each response like Server and ETag?
Jednak to nie będzie działać pod IIS
, ponieważ IIS
zarządzać statyki sama plików. Będzie działać tylko w samodzielnych aplikacjach, takich jak: kestrel
lub firefly
Czy masz na myśli, że wszystkie trzy z nich nie będą działały w IIS? Lub jedną z odpowiedzi, konkretnie? –
Pod IIS możesz dodać plik web.config do folderu wwwroot z konfiguracjami nagłówka. Przykładem, który będzie kontrolował nagłówki cache dla wszystkich plików:
<?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>
To nie zadziała, jeśli strony hostują moduły .NET Core (tak jak w przypadku OP), ponieważ .NET Core nie honoruje 'web.config'. Sposób działania .NET Core polega zasadniczo na uruchomieniu własnego serwera WWW o nazwie Kestrel, który ukrywa się za modułem HTTP IIS + (aka ANCM, czyli modułem podstawowym ASP.NET). https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module –
Jeśli szukasz rozwiązania umożliwiające skonfigurowanie różnych zachowań dla każdego środowiska (rozwój, produkcja & więcej), który jest także punkt o te ustawienia w pliku web.configzamiast sprzęt komputerowy kodując całość, można rozważyć następujące podejście.
Dodaj następującą sekcję klucz/wartość w appsettings.json pliku:
"StaticFiles": {
"Headers": {
"Cache-Control": "no-cache, no-store",
"Pragma": "no-cache",
"Expires": "-1"
}
}
następnie dodaj następującą w Configure
metoda Startup.cs pliku, odpowiednio:
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"];
}
});
Umożliwi to programistce zdefiniowanie różnych ustawień pamięci podręcznej przy użyciu różnych/wielu/kaskadowych plików ustawień (appsettings.json
, appsettings.production.json
itd.) - co można zrobić za pomocą starego wzorca konfiguracyjnego web.config
- z nowym środowiskiem ASP.NET Core.
Aby uzyskać dodatkowe informacje dotyczące tematu, proponuję również przeczytać this post i/lub te wspaniałe artykuły z oficjalnej ASP.NET docs główne:
podstawie odpowiedzi Josh Mouch za wyżej, dodaje kod, aby określić, czy jest to plik 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. Uwierzytelnianie plików cookie Asp.Net Core
- 2. Konfigurowanie Swagger (ASP.NET Core) za pomocą nagłówków Authorization (Nośnik)
- 3. Autoryzacja dla plików statycznych w ASP.NET MVC w/Owin
- 4. Trasowanie plików statycznych w ASP.NET MVC 3 jak robots.txt
- 5. BeginRequest pożary dla plików statycznych w aplikacji ASP.NET MVC
- 6. Trwałe przekierowanie Starsze trasy dla plików statycznych w ASP.Net MVC
- 7. Jak włączyć łącze przeglądarki dla plików statycznych w ASP.NET 5
- 8. .NET Core UseCors() nie dodaje nagłówków
- 9. @ Html.Action w Asp.Net Core
- 10. ASP.NET MVC na IIS przechodzi do obsługi plików statycznych
- 11. TempData null w asp.net core
- 12. Trasy w ASP.net Core API
- 13. Bezpieczeństwo IP w Asp.Net Core
- 14. Radzenie sobie z przesyłaniem dużych plików na ASP.NET Core 1.0
- 15. Angular2 ASP.NET Core AntiForgeryToken
- 16. Zarządzanie błędami Asp.net Core
- 17. ASP.NET Core Response.End()?
- 18. Dodawanie nagłówków w ASP.NET MVC 3
- 19. Uzyskaj wartości nagłówków w ASP.NET MVC
- 20. Zmiana cornerRadius używając Core Animation
- 21. Jak używać npm z ASP.NET Core
- 22. gunicorn nie obsługuje plików statycznych
- 23. Python/Tornado - kompresowanie plików statycznych
- 24. Lokalizacje szablonów i plików statycznych w Django
- 25. UrlMapping do plików statycznych w Grails
- 26. Zmiana koloru tła nagłówków WinFit ListView
- 27. Ustawienie nginx nie powoduje wygaśnięcia nagłówków dla zasobów statycznych Railsy
- 28. Wykrywanie programu ASP.NET Core 1.0
- 29. Czy istnieje Session.Abandon() asp.net Core
- 30. Projekt ASP.NET Core 1.0 F #
[Buforowanie zasobów statycznych na zawsze w środowisku ASP.NET Core] (https://www.softfluent.com/blog/dev/2017/01/08/Buforowanie-statyczne-zasoby-na zawsze-z-ASP-NET-Core) – meziantou