Letakkan fail statik dalam folder selain daripada wwwroot

Tarikh penciptaan halaman :

Persekitaran

Visual Studio
  • Studio Visual 2019
ASP.NET Teras
  • 3.1 (Laman Cukur, MVC)

Peri tentang lokasi penempatan lalai untuk fail statik

Fail statik (.js, .css, .png, dan lain-lain) bertekad untuk berada di bawah folder wwwroot secara lalai. Ini membolehkan pengguna laman web melihat .js dan .css secara langsung bersama-sama dengan HTML dan mencerminkannya di skrin.

Folder peletakkan lalai untuk fail statik ini adalah wwwroot Startup.Configure kerana ia memanggil kaedah berikut yang app.UseStaticFiles diterangkan dalam kaedah:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

Laluan folder fizikal "wwwroot" adalah "https://<nama hos>/" dalam URL. Sebagai contoh, fail dalam wwwroot\image\sample.png boleh didapati dalam URL di bawah https://<nama hos>/image.png amp; sample.]

Fail yang diletakkan di luar folder wwwroot pada dasarnya tidak dirujuk daripada URL di Web.

Bagaimana untuk meletakkan fail statik sebagai tambahan kepada folder wwwroot dan menukar laluan rujukan di URL

Konfigurasi folder

Kali ini, saya ingin meninggalkan fungsi folder wwwroot, tetapi juga meletakkan fail imej dalam folder berasingan supaya ia boleh dirujuk di Web.

Konfigurasi folder projek sepatutnya seperti berikut, supaya anda dapat melihat fail imej dalam folder Kandungan setiap tapak di Kawasan.

Dalam keadaan ini, URL .png fail dalam sampel1.png

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

Dan

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

ia mungkin kelihatan seperti itu, tetapi di sini

  • https://<Hostname>/site1/image/sample1.png

untuk dirujuk dalam .

Dengan cara ini, jika anda meletakkan fail statik sebagai tambahan kepada folder wwwroot, tindakan membina fail mungkin hilang. Jika anda terus menerbitkan, fail itu tidak akan diletakkan, jadi pastikan anda menetapkannya kembali ke kandungan.

Tambah atur cara

Untuk menjadikan fail statik tersedia dalam folder bukan wwwroot, Startup.Configure hubungi kaedah tambahan dalam kaedah seperti app.UseStaticFiles berikut:

// 追加
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 Memanggil kaedah tanpa hujah membolehkan folder wwwroot. Anda boleh menambah StaticFileOptions seting tambahan dengan lulus ke hujah pertama.

StaticFileOptions.FileProvider Tentukan folder PhysicalFileProvider fizikal yang anda mahu harta itu dirujuk sebagai fail statik semasa lulus contoh . Fail di bawah laluan yang ditentukan di sini adalah fail yang boleh dirujuk di Web. Ia juga boleh RequestPath menjadi akar URL untuk sifat-sifat berikut:

env.ContentRootPath Tempat penginapan ini mengandungi laluan akar (laluan fizikal) program Web. Ia adalah idea yang baik untuk menggabungkan ini dengan laluan relatif ke folder sasaran.

StaticFileOptions.RequestPath Tempat penginapan ini menerangkan laluan akar URL yang merujuk fail statik. Wwwroot https://<ホスト名> lalai adalah berdasarkan . Seperti dalam kod RequestPath = "/Site1" di atas, jika anda menulis https://<ホスト名>/Site1 ialah akar. Ini Areas/Site1/Content/xxxx menghubungkan laluan fizikal dengan https://<ホスト名>/Site1/xxxx URL.

Menggunakan sample1.png sebagai contoh, Areas/Site1/Content/image/sample.png fail boleh https://<ホスト名>/Site1/image/sample.png dirujuk dalam laluan.

Semak operasi

index.html Letakkan tag img supaya anda dapat melihat imej seperti berikut: Laluan ini juga merujuk imej tapak1 dan tapak2 seperti yang ditakrifkan.

<!-- 省略 -->

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

Jika anda menjalankannya dan melihat imej, ia adalah satu kejayaan.