Umieszczanie plików statycznych w folderach innych niż wwwroot

Data utworzenia strony :

Środowiska

Visual Studio
  • Visual Studio 2019
Rdzeń ASP.NET
  • 3.1 (strona razor, MVC)

Informacje o domyślnej lokalizacji umieszczania plików statycznych

Pliki statyczne (.js, .css, .png itp.) są domyślnie określane jako w folderze wwwroot. Dzięki temu użytkownicy witryny sieci Web mogą zobaczyć .js i .css pliki bezpośrednio wraz z kodem HTML i odzwierciedlić je na ekranie.

Domyślnym folderem umieszczania dla tego pliku statycznego jest wwwroot, Startup.Configure ponieważ wywołuje następującą metodę app.UseStaticFiles opisaną w metodzie:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

Ścieżka folderu fizycznego "wwwroot" to "https://<host name>/" w adresie URL. Na przykład plik w pliku wwwroot\image\sample.png można znaleźć w adresie URL pod adresem https://<nazwa hosta>/image.png przykład.]

Pliki umieszczone poza folderem wwwroot zasadniczo nie są odwoływane z adresu URL w sieci Web.

Jak umieścić pliki statyczne oprócz folderu wwwroot i zmienić ścieżkę odniesienia pod adresem URL

Konfiguracja folderu

Tym razem chcę opuścić funkcję folderu wwwroot, ale także umieścić plik obrazu w osobnym folderze, aby można było się do niego odwoływać w sieci Web.

Konfiguracja folderu projektu powinna być następująca, tak aby można było zobaczyć pliki obrazów w folderze Zawartość każdej witryny w obszarze.

W tym stanie adres URL .png pliku w próbce1.png

  • https://<hostname>/arenas/site1/content/image/sample1.png

I

  • https://<Nazwa hosta>/site1/content/image/sample1.png

może się wydawać, że tak będzie, ale tutaj

  • https://<Nazwa hosta>/site1/image/sample1.png

odniesienia w .

Nawiasem mówiąc, jeśli umieścisz plik statyczny oprócz folderu wwwroot, może brakować akcji kompilacji pliku. Jeśli nadal publikujesz, plik nie zostanie umieszczony, więc pamiętaj, aby ustawić go z powrotem do zawartości.

Dodawanie programu

Aby udostępnić pliki statyczne w folderach innych niż wwwroot, Startup.Configure należy wywołać dodatkowe app.UseStaticFiles metody w metodzie w następujący sposób:

// 追加
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 Wywołanie metody bez argumentów umożliwia folder wwwroot. Można dodać dodatkowe StaticFileOptions ustawienia, przechodząc do pierwszego argumentu.

StaticFileOptions.FileProvider Określa PhysicalFileProvider folder fizyczny, do którego właściwość ma być nazywana jako plik statyczny podczas przekazywania wystąpienia . Plik pod określoną w tym miejscu ścieżką jest plikiem, do którego można się odwoływać w sieci Web. Może być również RequestPath katalogiem głównym adresu URL dla następujących właściwości:

env.ContentRootPath Właściwość zawiera ścieżkę główną (ścieżkę fizyczną) programu sieci Web. Dobrym pomysłem jest połączenie tego z względną ścieżką do folderu docelowego.

StaticFileOptions.RequestPath Właściwość opisuje ścieżkę główną adresu URL, który odwołuje się do pliku statycznego. Domyślny element wwwroot https://<ホスト名> jest oparty na programie . Podobnie jak w RequestPath = "/Site1" powyższym kodzie, jeśli napiszesz https://<ホスト名>/Site1 jest korzeniem. Spowoduje to Areas/Site1/Content/xxxx połączenie ścieżki fizycznej z adresem https://<ホスト名>/Site1/xxxx URL.

Za pomocą sample1.png jako przykład, Areas/Site1/Content/image/sample.png plik może https://<ホスト名>/Site1/image/sample.png odwoływać się w ścieżce.

Sprawdź działanie

index.html Umieść znacznik img, aby obraz był widoczny w następujący sposób: Ścieżka odwołuje się również do obrazów site1 i site2 zgodnie z definicją.

<!-- 省略 -->

<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" />
<!-- ここまで追加 -->

Jeśli go uruchomisz i zobaczysz obraz, to jest to sukces.