ASP.NET základních Blazor statických souborů
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Tento článek popisuje Blazor konfiguraci aplikace pro obsluhu statických souborů.
Middleware statického prostředku
Tato část se týká aplikací na straně Blazor serveru.
Obsluha statických prostředků se spravuje některým ze dvou middlewarů popsaných v následující tabulce.
Middleware | rozhraní API | Verze .NET | Popis |
---|---|---|---|
Mapování statických prostředků | MapStaticAssets |
.NET 9 nebo novější | Optimalizuje doručování statických prostředků klientům. |
Static Files | UseStaticFiles | Všechny verze .NET | Obsluhuje statické prostředky klientům bez optimalizace MapStaticAssets , ale užitečné pro některé úlohy, které MapStaticAssets nejsou schopné spravovat. |
Nakonfigurujte middleware mapovat statické prostředky voláním MapStaticAssets
kanálu zpracování požadavků aplikace, který provádí následující kroky:
- Nastaví hlavičky ETag a Naposledy změněné .
- Nastaví hlavičky ukládání do mezipaměti.
- Používá middleware ukládání do mezipaměti.
- Pokud je to možné, obsluhuje komprimované statické prostředky.
- Pracuje se službou Content Delivery Network (CDN) (například Azure CDN) a obsluhuje statické prostředky aplikace blíže k uživateli.
- Minifies the app's static assets.
MapStaticAssets
funguje kombinováním procesů sestavení a publikování, které shromažďují informace o statických prostředcích v aplikaci. Tyto informace využívá knihovna modulu runtime k efektivnímu poskytování statických prostředků do prohlížečů.
MapStaticAssets
může nahradit UseStaticFiles ve většině situací. MapStaticAssets
Je ale optimalizovaná pro obsluhu prostředků ze známých umístění v aplikaci v době sestavení a publikování. Pokud aplikace obsluhuje prostředky z jiných umístění, jako jsou disky nebo vložené prostředky, UseStaticFiles by se měly použít.
MapStaticAssets
poskytuje následující výhody, které nebyly nalezeny:UseStaticFiles
- Komprese času sestavení pro všechny prostředky v aplikaci: Gzip (
Content-Encoding: gz
) během vývoje a Gzip s Brotli (Content-Encoding: br
) během publikování. - Obsah založený na obsahu
ETags
se generuje pro každý statický prostředek, což jsou řetězce s kódováním Base64 hodnot hash SHA-256 statických prostředků. Tím se zajistí, že prohlížeč znovu načte soubor pouze v případě, že se změnil jeho obsah.
Middleware statického souboru (UseStaticFiles) je užitečný v následujících situacích, které MapStaticAssets
nemůžou zpracovat:
- Použití předpony cesty u Blazor WebAssembly statických souborů assetů, které jsou popsány v části Předpona pro Blazor WebAssembly prostředky .
- Konfigurace mapování souborů přípon na konkrétní typy obsahu a nastavení statických možností souborů, které jsou popsány v části Mapování souborů a možnosti statického souboru .
Nakonfigurujte Middleware statického souboru tak, aby klientům sloužil statickým prostředkům voláním UseStaticFiles v kanálu zpracování požadavků aplikace. Další informace najdete v tématu Statické soubory v ASP.NET Core.
Ve verzích před rozhraním .NET 8 Blazor se statické soubory architektury, jako je skript, obsluhují prostřednictvím statického middlewaru Blazor souborů. V .NET 8 nebo novějších Blazor se statické soubory architektury mapují pomocí směrování koncového bodu a statický middleware se už nepoužívá.
Režim projektu statického webového assetu
Tato část se týká .Client
projektu Blazor webové aplikace.
Požadované <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
nastavení v .Client
projektu webové aplikace vrátí Blazor WebAssembly chování statických Blazor prostředků zpět na výchozí hodnoty, aby se projekt chová jako součást hostovaného projektu. Sada Blazor WebAssembly SDK (Microsoft.NET.Sdk.BlazorWebAssembly
) konfiguruje statické webové prostředky určitým způsobem tak, aby fungovala v samostatném režimu se serverem, který jednoduše využívá výstupy z knihovny. To není vhodné pro Blazor webovou aplikaci, kde je část aplikace WebAssembly logická část hostitele a musí se chovat podobně jako knihovna. Projekt například nezpřístupňuje sadu stylů (například BlazorSample.Client.styles.css
) a místo toho poskytuje hostiteli pouze sadu projektů, aby ji hostitel mohl zahrnout do vlastní sady stylů.
Změna hodnoty (Default
) nebo odebrání vlastnosti z .Client
projektu není podporována.<StaticWebAssetProjectMode>
Statické soubory v jiných prostředíchDevelopment
Tato část se týká statických souborů na straně serveru.
Při místním spuštění aplikace jsou statické webové prostředky povoleny pouze ve výchozím nastavení v Development prostředí. Pokud chcete povolit statické soubory pro jiná prostředí než Development při místním vývoji a testování (například Staging), zavolejte UseStaticWebAssetsWebApplicationBuilder v Program
souboru.
Upozorňující
Zavolejte UseStaticWebAssets přesné prostředí, aby se zabránilo aktivaci funkce v produkčním prostředí, protože obsluhuje soubory z jiných umístění na disku než z projektu, pokud je volána v produkčním prostředí. Příklad v této části kontroluje Staging prostředí voláním IsStaging.
if (builder.Environment.IsStaging())
{
builder.WebHost.UseStaticWebAssets();
}
Předpona pro Blazor WebAssembly prostředky
Tato část platí pro Blazor Web Apps.
Pomocí možnosti koncového WebAssemblyComponentsEndpointOptions.PathPrefix bodu nastavte řetězec cesty, který označuje předponu prostředků Blazor WebAssembly . Cesta musí odpovídat odkazovanému Blazor WebAssembly projektu aplikace.
endpoints.MapRazorComponents<App>()
.AddInteractiveWebAssemblyRenderMode(options =>
options.PathPrefix = "{PATH PREFIX}");
V předchozím příkladu {PATH PREFIX}
je zástupný symbol předponou cesty a musí začínat lomítkem (/
).
V následujícím příkladu je předpona cesty nastavena na /path-prefix
:
endpoints.MapRazorComponents<App>()
.AddInteractiveWebAssemblyRenderMode(options =>
options.PathPrefix = "/path-prefix");
Základní cesta statického webového prostředku
Tato část se týká samostatných Blazor WebAssembly aplikací.
Ve výchozím nastavení publikování aplikace umístí statické prostředky aplikace, včetně Blazor souborů architektury (_framework
prostředků složek), do kořenové cesty (/
) v publikovaném výstupu. Vlastnost <StaticWebAssetBasePath>
zadaná v souboru projektu (.csproj
) nastaví základní cestu k jiné než kořenové cestě:
<PropertyGroup>
<StaticWebAssetBasePath>{PATH}</StaticWebAssetBasePath>
</PropertyGroup>
V předchozím příkladu {PATH}
je zástupný symbol cestou.
Bez nastavení <StaticWebAssetBasePath>
vlastnosti se publikuje samostatná aplikace na adrese /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/
.
V předchozím příkladu {TFM}
je zástupný symbol Moniker (TFM) cílového rozhraní (například net6.0
).
<StaticWebAssetBasePath>
Pokud vlastnost v samostatné Blazor WebAssembly aplikaci nastaví publikovanou cestu statického prostředku na app1
, kořenová cesta k aplikaci v publikovaném výstupu je /app1
.
V souboru projektu samostatné Blazor WebAssembly aplikace (.csproj
):
<PropertyGroup>
<StaticWebAssetBasePath>app1</StaticWebAssetBasePath>
</PropertyGroup>
V publikovaném výstupu je /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/app1/
cesta k samostatné Blazor WebAssembly aplikaci .
V předchozím příkladu {TFM}
je zástupný symbol Moniker (TFM) cílového rozhraní (například net6.0
).
Tato část se týká samostatných Blazor WebAssembly aplikací a hostovaných Blazor WebAssembly řešení.
Ve výchozím nastavení publikování aplikace umístí statické prostředky aplikace, včetně Blazor souborů architektury (_framework
prostředků složek), do kořenové cesty (/
) v publikovaném výstupu. Vlastnost <StaticWebAssetBasePath>
zadaná v souboru projektu (.csproj
) nastaví základní cestu k jiné než kořenové cestě:
<PropertyGroup>
<StaticWebAssetBasePath>{PATH}</StaticWebAssetBasePath>
</PropertyGroup>
V předchozím příkladu {PATH}
je zástupný symbol cestou.
Bez nastavení <StaticWebAssetBasePath>
vlastnosti se klientská aplikace hostovaného řešení nebo samostatné aplikace publikuje na následujících cestách:
- Server V projektu hostovaného Blazor WebAssembly řešení:
/BlazorHostedSample/Server/bin/Release/{TFM}/publish/wwwroot/
- V samostatné Blazor WebAssembly aplikaci:
/BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/
<StaticWebAssetBasePath>
Pokud vlastnost v Client projektu hostované Blazor WebAssembly aplikace nebo v samostatné Blazor WebAssembly aplikaci nastaví publikovanou statickou cestu app1
k prostředku , kořenová cesta k aplikaci v publikovaném výstupu je /app1
.
Client V souboru projektu aplikace (.csproj
) nebo v souboru projektu samostatné Blazor WebAssembly aplikace (.csproj
):
<PropertyGroup>
<StaticWebAssetBasePath>app1</StaticWebAssetBasePath>
</PropertyGroup>
V publikovaném výstupu:
- Cesta k klientské aplikaci v Server projektu hostovaného Blazor WebAssembly řešení:
/BlazorHostedSample/Server/bin/Release/{TFM}/publish/wwwroot/app1/
- Cesta k samostatné Blazor WebAssembly aplikaci:
/BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/app1/
Vlastnost <StaticWebAssetBasePath>
se nejčastěji používá k řízení cest k publikovaným statickým prostředkům více Blazor WebAssembly aplikací v jednom hostovaném nasazení. Další informace najdete v tématu Více hostovaných aplikací ASP.NET CoreBlazor WebAssembly. Tato vlastnost je také efektivní v samostatných Blazor WebAssembly aplikacích.
Mapování souborů a možnosti statického souboru
Tato část se týká statických souborů na straně serveru.
Pokud chcete vytvořit další mapování souborů s jiným StaticFileOptionssouborem nebo ho FileExtensionContentTypeProvider nakonfigurovat, použijte jeden z následujících přístupů. V následujících příkladech {EXTENSION}
je zástupným symbolem přípona souboru a {CONTENT TYPE}
zástupným symbolem je typ obsahu. Obor názvů pro následující rozhraní API je Microsoft.AspNetCore.StaticFiles.
Konfigurace možností prostřednictvím injektáže závislostí (DI) v
Program
souboru pomocí StaticFileOptions:var provider = new FileExtensionContentTypeProvider(); provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}"; builder.Services.Configure<StaticFileOptions>(options => { options.ContentTypeProvider = provider; }); app.UseStaticFiles();
StaticFileOptions Předat přímo do UseStaticFiles
Program
souboru:var provider = new FileExtensionContentTypeProvider(); provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}"; app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider });
Pokud chcete vytvořit další mapování souborů s jiným StaticFileOptionssouborem nebo ho FileExtensionContentTypeProvider nakonfigurovat, použijte jeden z následujících přístupů. V následujících příkladech {EXTENSION}
je zástupným symbolem přípona souboru a {CONTENT TYPE}
zástupným symbolem je typ obsahu.
Konfigurace možností prostřednictvím injektáže závislostí (DI) v
Program
souboru pomocí StaticFileOptions:using Microsoft.AspNetCore.StaticFiles; ... var provider = new FileExtensionContentTypeProvider(); provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}"; builder.Services.Configure<StaticFileOptions>(options => { options.ContentTypeProvider = provider; });
Tento přístup konfiguruje stejného zprostředkovatele souborů, který slouží ke zpracování Blazor skriptu. Ujistěte se, že vaše vlastní konfigurace neruší obsluhu Blazor skriptu. Například neodebíjejte mapování souborů JavaScriptu tím, že nakonfigurujete zprostředkovatele pomocí
provider.Mappings.Remove(".js")
.V souboru použijte UseStaticFiles
Program
dvě volání:- Nakonfigurujte vlastního zprostředkovatele souborů při prvním volání pomocí StaticFileOptions.
- Druhý middleware obsluhuje Blazor skript, který používá výchozí konfiguraci statických souborů poskytovanou architekturou Blazor .
using Microsoft.AspNetCore.StaticFiles; ... var provider = new FileExtensionContentTypeProvider(); provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}"; app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider }); app.UseStaticFiles();
Pokud chcete spustit vlastní middleware statického souboru, můžete se vyhnout narušení poskytování služeb
_framework/blazor.server.js
MapWhen :app.MapWhen(ctx => !ctx.Request.Path .StartsWithSegments("/_framework/blazor.server.js"), subApp => subApp.UseStaticFiles(new StaticFileOptions() { ... }));
Další materiály
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro