Поместите статические файлы в папки, кроме wwwroot

Дата создания страницы :

окружающая среда

Визуальная студия
  • Визуальная студия 2019
ASP.NET ядро
  • 3.1 (Страница бритвы, MVC)

О местоположении размещения по умолчанию для статических файлов

Статические файлы (.js, .css, .png и т.д.) по умолчанию находятся под папкой wwwroot. Это позволяет пользователям веб-сайта видеть .js и .css файлы непосредственно вместе с HTML и отражать их на экране.

Папка размещения по умолчанию для этого статического файла wwwroot, Startup.Configure потому что он называет следующий app.UseStaticFiles метод, описанный в методе:

public class Startup
{
  // 省略

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  {
    // 省略

    app.UseStaticFiles();

    // 省略
  }
}

Путь физической папки "wwwroot" является "https://lt;host name'gt;/" в URL. В качестве примера, файл в wwwroot-образный образец.png можно найти в URL под https://lt;host name'gt;/image.png и образец.»

Файлы, размещенные за пределами папки wwwroot, по существу не ссылаются на URL-адрес в Интернете.

Как разместить статические файлы в дополнение к папке wwwroot и изменить путь ссылки на URL

Конфигурация folder

На этот раз я хочу оставить функцию папки wwwroot, но и поместить файл изображения в отдельную папку, чтобы его можно было ссылаться в Интернете.

Конфигурация папки проекта должна быть следующей, чтобы можно было видеть файлы изображений в папке Содержимое каждого сайта в областях.

В этом состоянии URL-.png файл в примере1.png

  • https://lt;hostname-gt;/arenas/site1/content/image/sample1.png

и

  • https://lt;Hostname-gt;/site1/content/image/sample1.png

может показаться, что это было бы, но здесь

  • https://lt;Hostname-gt;/site1/image/sample1.png

для ссылки в .

Кстати, если вы поместите статический файл в дополнение к папке wwwroot, действие сборки файла может быть отсутствует. Если вы продолжаете публиковать, файл не будет размещен, так что не забудьте установить его обратно в содержание.

Добавить программу

Чтобы сделать статические файлы доступными в папках, не являяся wwwroot, Startup.Configure позвоните app.UseStaticFiles дополнительным методам в методе следующим образом:

// 追加
using Microsoft.Extensions.FileProviders;
using System.IO;

// 省略

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  // 省略

  // wwwroot フォルダで静的ファイル参照を有効にする
  app.UseStaticFiles();

  // Site1 用の物理コンテンツフォルダと参照 URL を紐づける
  app.UseStaticFiles(new StaticFileOptions()
  {
    FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Areas/Site1/Content")),
    RequestPath = "/Site1",
  });

  // Site2 用の物理コンテンツフォルダと参照 URL を紐づける
  app.UseStaticFiles(new StaticFileOptions()
  {
    FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Areas/Site2/Content")),
    RequestPath = "/Site2",
  });

  // 省略
}

app.UseStaticFiles Вызов метода без аргументов позволяет папку wwwroot. Вы можете добавить StaticFileOptions дополнительные настройки, передав к первому аргументу.

StaticFileOptions.FileProvider Определяет физическую PhysicalFileProvider папку, которую вы хотите, чтобы свойство относиться к статическому файлу при передаче экземпляра . Файл под указанным здесь путем является файлом, на который можно ссылаться в Интернете. Он также может быть RequestPath корнем URL для следующих свойств:

env.ContentRootPath Свойство содержит корневой путь (физический путь) веб-программы. Это хорошая идея, чтобы объединить это с относительным путем к целевой папке.

StaticFileOptions.RequestPath Свойство описывает корневой путь URL-адреса, который ссылается на статический файл. Wwwroot по https://<ホスト名> умолчанию основан на . Как и в RequestPath = "/Site1" вышеупомянутом коде, если вы пишете https://<ホスト名>/Site1 является корнем. Это Areas/Site1/Content/xxxx связывает физический https://<ホスト名>/Site1/xxxx путь с URL.

Используя пример .png примере, Areas/Site1/Content/image/sample.png файл можно https://<ホスト名>/Site1/image/sample.png ссылаться на пути.

Проверка работы

index.html Поместите тег img, чтобы вы могли видеть изображение следующим образом: Путь также ссылки site1 и site2 изображения, как определено.

<!-- 省略 -->

<div class="text-center">
	<h1 class="display-4">Welcome</h1>
	<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<!-- ここから追加 -->
<img src="~/image/sample.png" />
<img src="~/site1/image/sample1.png" />
<img src="~/site2/image/sample2.png" />
<!-- ここまで追加 -->

Если вы запустите его и увидеть изображение, это успех.