Статические файлы Blazor в ASP.NET Core
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 8 этой статьи.
В этой статье описывается Blazor конфигурация приложения для обслуживания статических файлов.
Blazor Статические файлы платформы
В выпусках до .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>
ПО промежуточного слоя для статических файлов
Этот раздел относится к приложениям на стороне Blazor сервера.
Настройте ПО промежуточного слоя статических файлов для предоставления статических ресурсов клиентам, вызвав UseStaticFiles в конвейере обработки запросов приложения. Подробные сведения см. в статье Статические файлы в ASP.NET Core.
Статические файлы в средах,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 как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по