Розміщення статичних файлів у папках, крім wwwroot

Дата створення сторінки :

Середовищі

Візуальна студія
  • Visual Studio 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://<ім'я хоста>/" в URL-адресі. Наприклад, файл у файлі wwwroot\image\sample.png можна знайти в URL-адресі в розділі https://<ім'я хоста>/image.png і зразок.]

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

Як розмістити статичні файли на додаток до папки wwwroot і змінити шлях посилання за URL

Конфігурація папки

На цей раз я хочу залишити функцію папки wwwroot, але і помістити файл зображення в окрему папку, щоб на нього можна було посилатися в Інтернеті.

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

У цьому стані URL-адреса .png у форматі sample1.png

  • https://<ім'я хоста>/арени/site1/content/image/sample1.png

І

  • https://<Ім'я хоста>/site1/content/image/sample1.png

може здатися, що це буде, але тут

  • https://<Ім'я хоста>/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-адреси, яка посилається на статичний файл. За промовчанням на основі https://<ホスト名> файлу використовується wwwroot . Як і в RequestPath = "/Site1" наведеному вище коді, якщо ви пишете https://<ホスト名>/Site1 є коренем. Це Areas/Site1/Content/xxxx зв'язує фізичний https://<ホスト名>/Site1/xxxx шлях з URL-адресою.

Використовуючи sample1.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" />
<!-- ここまで追加 -->

Якщо ви запускаєте його і бачите зображення, це успіх.