وضع ملفات ثابتة في مجلدات أخرى غير 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://<host name>/" في عنوان URL. على سبيل المثال، يمكن العثور على الملف في wwwroot\image\sample.png في عنوان URL أسفل https://<اسم المضيف>/الصورة.png وعينة.]

الملفات الموضوعة خارج المجلد wwwroot أساسا لا تتم الإشارة إليها من URL على ويب.

كيفية وضع ملفات ثابتة بالإضافة إلى المجلد wwwroot وتغيير مسار المرجع في URL

تكوين المجلد

هذه المرة ، أريد أن أترك وظيفة المجلد wwwroot ، ولكن أيضا وضع ملف الصورة في مجلد منفصل بحيث يمكن الرجوع إليها على شبكة الإنترنت.

يجب أن يكون تكوين المجلد للمشروع كما يلي، بحيث يمكنك مشاهدة ملفات الصور في مجلد المحتوى لكل موقع في المناطق.

في هذه الحالة، url .png الملف في sample1.png

  • https://<اسم المضيف>/arenas/site1/content/image/sample1.png

و

  • https://<اسم المضيف>/site1/content/image/sample1.png

قد يبدو وكأنه سيكون، ولكن هنا

  • https://<اسم المضيف>/site1/image/sample1.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 الذي يشير إلى الملف الثابت. يستند wwwroot الافتراضي https://<ホスト名> على . كما هو الحال في RequestPath = "/Site1" التعليمات البرمجية أعلاه، إذا قمت بالكتابة https://<ホスト名>/Site1 هو الجذر. Areas/Site1/Content/xxxx وهذا يربط المسار الفعلي مع https://<ホスト名>/Site1/xxxx URL.

باستخدام sample1.png كمثال، يمكن Areas/Site1/Content/image/sample.png الرجوع إلى الملف https://<ホスト名>/Site1/image/sample.png في المسار.

التحقق من العملية

index.html ضع علامة img بحيث يمكنك رؤية الصورة على النحو التالي: يشير المسار أيضا إلى صور الموقع1 و 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" />
<!-- ここまで追加 -->

إذا قمت بتشغيله ورؤية الصورة، انها ناجحة.