วางไฟล์แบบคงที่ในโฟลเดอร์อื่นที่ไม่ใช่ wwwroot

วันที่สร้างเพจ :

สิ่งแวดล้อม

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.1 (หน้า Razor, MVC)

เกี่ยวกับตําแหน่งการจัดวางเริ่มต้นสําหรับแฟ้มแบบคงที่

โดยค่าเริ่มต้น แฟ้มแบบคงที่ (.js .css .png ฯลฯ) จะยังคงอยู่ในโฟลเดอร์ wwwroot วิธีนี้ช่วยให้ผู้ใช้เว็บไซต์สามารถดูและ.jsและ.cssและ HTML ได้โดยตรงและเผยแพร่บนหน้าจอ

โฟลเดอร์การปรับใช้เริ่มต้นสําหรับแฟ้มแบบคงที่ Startup.Configure นี้คือ wwwroot ซึ่งเรียก app.UseStaticFiles วิธีการต่อไปนี้ที่อธิบายไว้ในวิธีการ:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

เส้นทางของโฟลเดอร์ที่มีอยู่จริง "wwwroot" คือส่วนของ "https://< ชื่อโฮสต์ >/" ใน URL ตัวอย่างเช่น แฟ้มใน "wwwroot\image\sample.png" สามารถอ้างอิงใน URL ผ่าน https://< ชื่อโฮสต์ >/image/sample.pngใน URL

ไฟล์ที่วางไว้นอกโฟลเดอร์ wwwroot ไม่สามารถอ้างอิงได้จาก URL บนเว็บ

วิธีการวางแฟ้มแบบคงที่ภายนอกโฟลเดอร์ wwwroot และเปลี่ยนเส้นทางการอ้างอิงใน URL

การกําหนดค่าโฟลเดอร์

เวลา นี้ ฉัน ต้องการ วาง ไฟล์ ภาพ ใน โฟลเดอร์ แยก เพื่อ อ้างอิง ใน เว็บ ใน ขณะ ที่ การ รักษา คุณสมบัติ ของ โฟลเดอร์ wwwroot.

การกําหนดค่าโฟลเดอร์ของโครงการแสดงอยู่ด้านล่างเพื่ออ้างอิงแฟ้มรูปในโฟลเดอร์เนื้อหาของแต่ละไซต์ใน Areas

ในสถานะนี้ URL ที่อ้างอิงไฟล์.png sample1 คือ

  • 10/10.png 2014

และ

  • 28/10.png 2014

อาจดูเหมือน แต่ที่นี่

  • ชื่อโฮสต์ >/site1/image/sample1.png

ระบุการอ้างอิงใน

โดยวิธีการที่ถ้าคุณวางไฟล์แบบคงที่นอกโฟลเดอร์ wwwroot การดําเนินการ สร้างไฟล์ อาจเป็น "ไม่มี" ถ้าคุณดําเนินการต่อ การประกาศจะไม่วางแฟ้ม ดังนั้นโปรดตรวจสอบให้แน่ใจว่า แฟ้มถูกตั้งค่า ใหม่เป็นเนื้อหา

เพิ่มโปรแกรม

เมื่อต้องการอนุญาตให้อ้างอิงแฟ้มแบบคงที่ในโฟลเดอร์อื่นที่ไม่ใช่ Startup.Configure wwwroot 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 นี้จะเชื่อมโยง URL https://<ホスト名>/Site1/xxxx กับเส้นทางทางกายภาพของ

ตัวอย่างเช่น .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" />
<!-- ここまで追加 -->

ถ้าคุณเรียกใช้มันและเห็นภาพก็ประสบความสําเร็จ