מיקום קבצים סטטיים בתיקיות שאינן wwwroot

תאריך יצירת דף :

בסביבה

סטודיו חזותי
  • סטודיו ויזואלי 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. לדוגמה, ניתן למצוא את הקובץ.png בכתובת ה- URL תחת https://<host name>/image.png ודוגמה.]

קבצים הממוקמים מחוץ לתיקיה wwwroot אינם מוזכרים למעשה מכתובת URL באינטרנט.

כיצד למקם קבצים סטטיים בנוסף לתיקיה wwwroot ולשנות את נתיב ההפניה בכתובת ה- URL

תצורת תיקיה

הפעם, ברצוני להשאיר את הפונקציה של התיקיה wwwroot, אך גם למקם את קובץ התמונה בתיקיה נפרדת כך שניתן יהיה להפנות אליו באינטרנט.

תצורת התיקיה של הפרוייקט צריכה להיות כדלקמן, כך שתוכל לראות את קבצי התמונה בתיקיה תוכן של כל אתר באזורים.

במצב זה, כתובת ה- URL .png את הקובץ בדוגמה1.png

  • https://<hostname>/זירות/site1/תוכן/תמונה/דוגמה1.png

ו

  • https://<שם מחשב מארח>/site1/תוכן/תמונה/דוגמה1.png

זה אולי נראה כמו שזה יהיה, אבל כאן

  • https://<שם מחשב מארח>/site1/תמונה/דוגמה1.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.

באמצעות דוגמה1.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" />
<!-- ここまで追加 -->

אם אתה מפעיל אותו ורואה את התמונה, זו הצלחה.