Статические файлы Blazor в ASP.NET Core
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 8 этой статьи.
В этой статье описывается Blazor конфигурация приложения для обслуживания статических файлов.
ПО промежуточного слоя статических ресурсов
Этот раздел относится к приложениям на стороне Blazor сервера.
Обслуживание статических ресурсов управляется двумя по промежуточному слоям, описанными в следующей таблице.
ПО промежуточного слоя | API | Версия .NET | Description |
---|---|---|---|
Сопоставление статических ресурсов | MapStaticAssets |
.NET 9 или более поздней версии | Оптимизирует доставку статических ресурсов клиентам. |
Static Files | UseStaticFiles | Все версии .NET | Служит статическим ресурсам клиентам без оптимизации MapStaticAssets , но полезной для некоторых задач, которые MapStaticAssets не могут управлять. |
Настройте ПО промежуточного слоя статических ресурсов карты, вызвав MapStaticAssets
в конвейере обработки запросов приложения следующее:
- Задает заголовки ETag и Last-Modified.
- Задает заголовки кэширования.
- Использует по промежуточному слоям кэширования.
- По возможности обслуживает сжатые статические ресурсы.
- Работает с сеть доставки содержимого (CDN) (например, Azure CDN) для обслуживания статических ресурсов приложения ближе к пользователю.
- Минифифис статических ресурсов приложения.
MapStaticAssets
работает путем объединения процессов сборки и публикации для сбора сведений о статических ресурсах в приложении. Эта информация используется библиотекой среды выполнения для эффективного обслуживания статических ресурсов браузерам.
MapStaticAssets
может заменить UseStaticFiles в большинстве ситуаций. MapStaticAssets
Однако оптимизировано для обслуживания ресурсов из известных расположений в приложении во время сборки и публикации. Если приложение обслуживает ресурсы из других расположений, таких как диск или внедренные ресурсы, UseStaticFiles следует использовать.
MapStaticAssets
предоставляет следующие преимущества, с которыми UseStaticFilesне найдено:
- Сжатие во время сборки для всех ресурсов в приложении: Gzip (
Content-Encoding: gz
) во время разработки и Gzip с Brotli (Content-Encoding: br
) во время публикации. - На основе
ETags
содержимого создаются для каждого статического ресурса, которые являются строками в кодировке Base64 хэшей хэшей SHA-256 статических ресурсов. Это гарантирует, что браузер перезагрузит файл только в том случае, если его содержимое изменилось.
По промежуточному слоям статических файлов (UseStaticFiles) полезно в следующих ситуациях, которые MapStaticAssets
не могут обрабатываться:
- Применение префикса пути к Blazor WebAssembly статическим файлам активов, который рассматривается в разделе префикса ресурсовBlazor WebAssembly.
- Настройка сопоставлений файлов расширений с определенными типами контента и настройка параметров статических файлов, которые рассматриваются в разделе "Сопоставления файлов" и "Статические параметры файла".
Настройте ПО промежуточного слоя статических файлов для предоставления статических ресурсов клиентам, вызвав UseStaticFiles в конвейере обработки запросов приложения. Подробные сведения см. в статье Статические файлы в ASP.NET Core.
В выпусках до .NET 8 статические файлы платформы, Blazor такие как Blazor скрипт, обслуживаются через ПО промежуточного слоя статических файлов. В .NET 8 или более поздней версии Blazor статические файлы платформы сопоставляются с использованием маршрутизации конечных точек, а ПО промежуточного слоя статических файлов больше не используется.
Режим проекта статического веб-ресурса
Этот раздел относится к .Client
проекту Blazor веб-приложения.
Обязательный <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
параметр в .Client
проекте Blazor веб-приложения возвращает Blazor WebAssembly поведение статических ресурсов обратно к значениям по умолчанию, чтобы проект работал в рамках размещенного проекта. Пакет Blazor WebAssembly SDK (Microsoft.NET.Sdk.BlazorWebAssembly
) настраивает статические веб-ресурсы определенным способом для работы в автономном режиме с сервером, просто используюющим выходные данные из библиотеки. Это не подходит для Blazor веб-приложения, где часть webAssembly приложения является логической частью узла и должна вести себя больше как библиотека. Например, проект не предоставляет пакет стилей (например, BlazorSample.Client.styles.css
) и вместо этого предоставляет узел пакету проектов, чтобы узел может включить его в собственный пакет стилей.
Изменение значения (Default
) или удаление свойства из .Client
проекта не поддерживается.<StaticWebAssetProjectMode>
Статические файлы в средах,Development
отличных от среды
Этот раздел относится к статическим файлам на стороне сервера.
При локальном запуске приложения статические веб-ресурсы включены только по умолчанию в Development среде. Чтобы включить статические файлы для сред, отличных от Development локальной разработки и тестирования (например, Staging), вызовите UseStaticWebAssetsWebApplicationBuilder его в Program
файле.
Предупреждение
Вызовите UseStaticWebAssets для конкретного окружения, чтобы предотвратить активацию компонента в рабочей среде, так как он обслуживает файлы из отдельных расположений на диске, отличном от диска проекта, если он вызывается в рабочей среде. В примере в этом разделе проверяется наличие Staging окружения путем вызова IsStaging.
if (builder.Environment.IsStaging())
{
builder.WebHost.UseStaticWebAssets();
}
Префикс для Blazor WebAssembly ресурсов
Этот раздел относится к Blazor веб-приложения.
Используйте параметр конечной WebAssemblyComponentsEndpointOptions.PathPrefix точки, чтобы задать строку пути, указывающую префикс для Blazor WebAssembly ресурсов. Путь должен соответствовать проекту приложения, на который Blazor WebAssembly ссылается ссылка.
endpoints.MapRazorComponents<App>()
.AddInteractiveWebAssemblyRenderMode(options =>
options.PathPrefix = "{PATH PREFIX}");
В предыдущем примере {PATH PREFIX}
заполнитель является префиксом пути и должен начинаться с косой черты (/
).
В следующем примере префикс пути имеет значение /path-prefix
:
endpoints.MapRazorComponents<App>()
.AddInteractiveWebAssemblyRenderMode(options =>
options.PathPrefix = "/path-prefix");
Базовый путь к статическому веб-ресурсу
Этот раздел относится к автономным Blazor WebAssembly приложениям.
По умолчанию публикация приложения помещает статические ресурсы приложения, включая Blazor файлы платформы (_framework
ресурсы папок), в корневой путь (/
) в опубликованных выходных данных. Свойство <StaticWebAssetBasePath>
, указанное в файле проекта (.csproj
), задает базовый путь к некорневому пути:
<PropertyGroup>
<StaticWebAssetBasePath>{PATH}</StaticWebAssetBasePath>
</PropertyGroup>
В предыдущем примере заполнитель {PATH}
— это путь.
Без задания <StaticWebAssetBasePath>
свойства автономное приложение публикуется по адресу /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/
.
В предыдущем примере заполнитель — это Moniker (например, {TFM}
TFM).net6.0
<StaticWebAssetBasePath>
Если свойство в автономном Blazor WebAssembly приложении задает путь к опубликованному статичному ресурсу, корневой путь app1
к приложению в опубликованных выходных данных./app1
В файле проекта автономного Blazor WebAssembly приложения (.csproj
):
<PropertyGroup>
<StaticWebAssetBasePath>app1</StaticWebAssetBasePath>
</PropertyGroup>
В опубликованных выходных данных путь к автономному Blazor WebAssembly приложению имеет значение /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/app1/
.
В предыдущем примере заполнитель — это Moniker (например, {TFM}
TFM).net6.0
Этот раздел относится к изолированным приложениям Blazor WebAssembly и размещенным решениям Blazor WebAssembly.
По умолчанию публикация приложения помещает статические ресурсы приложения, включая Blazor файлы платформы (_framework
ресурсы папок), в корневой путь (/
) в опубликованных выходных данных. Свойство <StaticWebAssetBasePath>
, указанное в файле проекта (.csproj
), задает базовый путь к некорневому пути:
<PropertyGroup>
<StaticWebAssetBasePath>{PATH}</StaticWebAssetBasePath>
</PropertyGroup>
В предыдущем примере заполнитель {PATH}
— это путь.
Без задания свойства <StaticWebAssetBasePath>
клиентское приложение размещенного решения или изолированного приложения публикуется по следующим путям:
- В проекте Server размещенного решения Blazor WebAssembly:
/BlazorHostedSample/Server/bin/Release/{TFM}/publish/wwwroot/
- В изолированном приложении Blazor WebAssembly:
/BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/
Если свойство <StaticWebAssetBasePath>
в проекте Client размещенного приложения Blazor WebAssembly или в изолированном приложении Blazor WebAssembly задает в качестве пути опубликованного статического ресурса значение app1
, корневой путь к приложению в опубликованных выходных данных будет иметь значение /app1
.
В файле проекта приложения Client (.csproj
) или в файле проекта изолированного приложения Blazor WebAssembly (.csproj
):
<PropertyGroup>
<StaticWebAssetBasePath>app1</StaticWebAssetBasePath>
</PropertyGroup>
В опубликованных выходных данных:
- Путь к клиентскому приложению в проекте Server размещенного решения Blazor WebAssembly:
/BlazorHostedSample/Server/bin/Release/{TFM}/publish/wwwroot/app1/
- Путь к изолированному приложению Blazor WebAssembly:
/BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/app1/
Свойство <StaticWebAssetBasePath>
чаще всего используется для управления путями к опубликованным статическим ресурсам нескольких приложений Blazor WebAssembly в одном размещенном развертывании. Дополнительные сведения см. в статье Несколько размещенных приложений Blazor WebAssembly ASP.NET Core. Свойство также применяется в изолированных приложениях Blazor WebAssembly.
В предыдущих примерах заполнитель является {TFM}
моникером целевой платформы (TFM) (например, net6.0
).
Сопоставления файлов и статические параметры файлов
Этот раздел относится к статическим файлам на стороне сервера.
Чтобы создать дополнительные сопоставления файлов с помощью FileExtensionContentTypeProvider или настроить другие StaticFileOptions, используйте один из следующих способов. В следующих примерах заполнитель {EXTENSION}
является расширением файла, а заполнитель {CONTENT TYPE}
— типом содержимого. Пространство имен для следующего API.Microsoft.AspNetCore.StaticFiles
Настройка параметров с помощью внедрения зависимостей (DI) в
Program
файле с помощью StaticFileOptions:var provider = new FileExtensionContentTypeProvider(); provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}"; builder.Services.Configure<StaticFileOptions>(options => { options.ContentTypeProvider = provider; }); app.UseStaticFiles();
StaticFileOptions Передайте непосредственно в
Program
файл:UseStaticFilesvar provider = new FileExtensionContentTypeProvider(); provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}"; app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider });
Чтобы создать дополнительные сопоставления файлов с помощью FileExtensionContentTypeProvider или настроить другие StaticFileOptions, используйте один из следующих способов. В следующих примерах заполнитель {EXTENSION}
является расширением файла, а заполнитель {CONTENT TYPE}
— типом содержимого.
Настройка параметров с помощью внедрения зависимостей (DI) в
Program
файле с помощью StaticFileOptions:using Microsoft.AspNetCore.StaticFiles; ... var provider = new FileExtensionContentTypeProvider(); provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}"; builder.Services.Configure<StaticFileOptions>(options => { options.ContentTypeProvider = provider; });
Этот подход настраивает тот же поставщик файлов, который использовался для обслуживания скрипта Blazor . Убедитесь, что настраиваемая конфигурация не вмешивается в обслуживание скрипта Blazor . Например, не удаляйте сопоставление для файлов JavaScript, настраивая поставщик с помощью
provider.Mappings.Remove(".js")
.Используйте два вызова UseStaticFiles в
Program
файле:- Настройте пользовательский поставщик файлов при первом вызове с помощью StaticFileOptions.
- Второе ПО промежуточного слоя служит Blazor скрипту, который использует конфигурацию статических файлов по умолчанию, предоставляемую Blazor платформой.
using Microsoft.AspNetCore.StaticFiles; ... var provider = new FileExtensionContentTypeProvider(); provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}"; app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider }); app.UseStaticFiles();
Чтобы избежать конфликтов при обслуживании
_framework/blazor.server.js
, можете использовать MapWhen для выполнения пользовательского ПО промежуточного слоя для статических файлов.app.MapWhen(ctx => !ctx.Request.Path .StartsWithSegments("/_framework/blazor.server.js"), subApp => subApp.UseStaticFiles(new StaticFileOptions() { ... }));
Дополнительные ресурсы
ASP.NET Core
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру