Placer des fichiers statiques dans des dossiers autres que wwwroot

Date de création de la page :

environnement

Studio visuel
  • Studio visuel 2019
ASP.NET noyau
  • 3.1 (Page Razor, MVC)

À propos de l’emplacement de placement par défaut pour les fichiers statiques

Les fichiers statiques (.js, .css, .png, etc.) sont déterminés à être sous le dossier wwwroot par défaut. Cela permet aux utilisateurs du site Web de voir les .js et .css fichiers directement avec HTML et de les refléter à l’écran.

Le dossier de placement par défaut pour ce fichier statique est wwwroot Startup.Configure car il appelle la méthode suivante décrite dans la app.UseStaticFiles méthode:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

Le chemin du dossier physique « wwwroot » est « https://<host name>/ » dans l’URL. À titre d’exemple, le fichier dans wwwroot\image\sample.png peut être trouvé dans l’URL sous https://<host name>/image.png amp; sample.]

Les fichiers placés en dehors du dossier wwwroot ne sont essentiellement pas référencés à partir d’une URL sur le Web.

Comment placer des fichiers statiques en plus du dossier wwwroot et modifier le chemin de référence à l’URL

Configuration du dossier

Cette fois, je veux laisser la fonction du dossier wwwroot, mais aussi placer le fichier d’image dans un dossier séparé afin qu’il puisse être référencé sur le Web.

La configuration du dossier du projet doit être la suivante, de sorte que vous pouvez voir les fichiers d’image dans le dossier contenu de chaque site dans les zones.

Dans cet état, l’URL .png fichier dans l’échantillon1.png

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

et

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

il peut sembler que ce serait, mais ici

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

à référencer dans .

Soit dit en passant, si vous placez un fichier statique en plus du dossier wwwroot, l’action de construction du fichier peut être manquante. Si vous continuez à publier, le fichier ne sera pas placé, alors assurez-vous de le remettre au contenu.

Ajouter un programme

Pour rendre les fichiers statiques disponibles dans les dossiers non wwwroot, Startup.Configure appelez des méthodes supplémentaires dans la méthode comme suit 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 Appeler la méthode sans arguments permet le dossier wwwroot. Vous pouvez ajouter des StaticFileOptions paramètres supplémentaires en passant au premier argument.

StaticFileOptions.FileProvider Spécifie PhysicalFileProvider le dossier physique que vous souhaitez que la propriété se réfère à un fichier statique tout en passant une instance de . Le fichier sous le chemin spécifié ici est un fichier qui peut être référencé sur le Web. Il peut également être la RequestPath racine de l’URL pour les propriétés suivantes:

env.ContentRootPath La propriété contient le chemin racine (chemin physique) du programme Web. C’est une bonne idée de combiner cela avec le chemin relatif vers le dossier cible.

StaticFileOptions.RequestPath La propriété décrit le chemin de racine de l’URL qui fait référence au fichier statique. Le wwwroot par https://<ホスト名> défaut est basé sur . Comme dans le RequestPath = "/Site1" code ci-dessus, si vous écrivez https://<ホスト名>/Site1 est la racine. Cela Areas/Site1/Content/xxxx relie le chemin physique avec https://<ホスト名>/Site1/xxxx l’URL.

En utilisant sample1.png exemple, le Areas/Site1/Content/image/sample.png fichier peut être https://<ホスト名>/Site1/image/sample.png référencé dans le chemin.

Vérifier l’opération

index.html Placez l’étiquette img afin que vous puissiez voir l’image comme suit: Le chemin fait également référence aux images du site1 et du site2 telles que définies.

<!-- 省略 -->

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

Si vous l’exécutez et voyez l’image, c’est un succès.