Статические файлы 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 файл:UseStaticFiles

    var 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() { ... }));
    

Дополнительные ресурсы