Đặt các tệp tĩnh trong một thư mục khác với wwwroot

Ngày tạo trang :

môi trường

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.1 (Trang Razor, MVC)

Giới thiệu về vị trí mặc định của tệp tĩnh

Theo mặc định, các tệp tĩnh (.js, .css, .png, v.v.) vẫn còn trong thư mục wwwroot. Điều này cho phép người dùng trang web xem .js tệp .css và HTML và lan truyền trên màn hình.

Thư mục triển khai mặc định cho tệp tĩnh Startup.Configure này là wwwroot, gọi các phương pháp app.UseStaticFiles sau đây được mô tả trong phương pháp:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

Đường dẫn đến thư mục vật lý "wwwroot" trong URL là vị trí của "https://<hosting nams>/", Ví dụ: tệp trong "wwwroot\image\sample.png có thể được tham chiếu trong URL thông qua https://<hosting namle>/image/sample.png url.

Các tệp được đặt bên ngoài thư mục wwwroot về cơ bản không thể được tham chiếu từ URL trên web.

Làm thế nào để đặt các tập tin tĩnh bên ngoài thư mục wwwroot và thay đổi đường dẫn tham chiếu trong URL

Cấu hình thư mục

Thời gian này, tôi muốn đặt các tập tin hình ảnh trong một thư mục riêng biệt để tham khảo nó trên web trong khi vẫn giữ chức năng của thư mục wwwroot.

Cấu hình thư mục của dự án được hiển thị dưới đây để tham khảo các tệp hình ảnh trong thư mục nội dung của mỗi trang web trong Areas.

Trong trạng thái này, tham chiếu đến sample1.png tệp trong tệp là URL

  • https://<Host Namt>/areas/site1/content/image/sample1.png

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

Có vẻ như, nhưng ở đây

  • https://<Host Namt>/site1/image/sample1.png

Cung cấp tài liệu tham khảo trong .

Nhân tiện, nếu bạn đặt tệp tĩnh bên ngoài thư mục wwwroot, thao tác xây dựng tệp có thể là Không có. Nếu bạn tiếp tục, bản phát hành sẽ không đặt tệp, vì vậy hãy đảm bảo đặt lại tệp thành nội dung.

Thêm chương trình

Để cho phép tham chiếu đến các tệp tĩnh trong một thư mục khác với wwwroot, Startup.Configure app.UseStaticFiles hãy gọi các phương thức khác trong phương thức như sau:

// 追加
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 Gọi phương thức mà không có tham số sẽ cho phép thư mục wwwroot. Khi bạn vượt qua để StaticFileOptions đối số đầu tiên, bạn có thể thực hiện các thiết lập khác.

StaticFileOptions.FileProvider Vượt qua PhysicalFileProvider các trường hợp của các tài sản và chỉ định các thư mục vật lý để tham khảo như là một tập tin tĩnh. Các tập tin dưới đường dẫn được chỉ định ở đây là các tập tin mà web có thể tham khảo. Nó cũng là RequestPath gốc rễ của URL của các thuộc tính sau:

env.ContentRootPath Thuộc tính chứa đường dẫn gốc (đường dẫn vật lý) của chương trình Web. Bạn có thể kết hợp đường dẫn này và đường dẫn tương đối của thư mục đích.

StaticFileOptions.RequestPath Thuộc tính mô tả đường dẫn gốc của URL tham chiếu đến tệp tĩnh. mặc định wwwroot https://<ホスト名> để Như được hiển RequestPath = "/Site1" thị trong mã ở trên, https://<ホスト名>/Site1 Đó là gốc rễ. Điều này Areas/Site1/Content/xxxx liên kết URL https://<ホスト名>/Site1/xxxx với đường dẫn vật lý.

Lấy sample1 làm ví .png, tệp có Areas/Site1/Content/image/sample.png thể tham https://<ホスト名>/Site1/image/sample.png chiếu đến đường dẫn.

Xác nhận hành động

index.html Đặt thẻ img vào để bạn có thể tham khảo hình ảnh như sau: Đường dẫn cũng đề cập đến hình ảnh của site1 và site2 để xác định chúng.

<!-- 省略 -->

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

Nếu bạn chạy nó và nhìn thấy hình ảnh, điều này đã thành công.