Inserire file statici in cartelle diverse da wwwroot

Data di creazione della pagina :

ambiente

Visual Studio
  • Visual Studio 2019
ASP.NET Nucleo
  • 3.1 (pagina Razor, MVC)

Informazioni sul percorso di posizionamento predefinito per i file statici

I file statici (.js, .css, .png, ecc.) sono determinati per impostazione predefinita sotto la cartella wwwroot. Ciò consente agli utenti del sito Web di visualizzare .js e .css file direttamente insieme all'HTML e rifletterli sullo schermo.

La cartella di posizionamento predefinita per questo file statico è wwwroot Startup.Configure perché chiama il seguente metodo descritto nel metodo app.UseStaticFiles :

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

Il percorso della cartella fisica "wwwroot" è "https://<nome host>/" nell'URL. Ad esempio, il file in wwwroot\image\sample.png è disponibile nell'URL in https://<nome host>/image.png amp; sample.]

I file inseriti all'esterno della cartella wwwroot non fanno essenzialmente riferimento a un URL sul Web.

Come inserire file statici oltre alla cartella wwwroot e modificare il percorso di riferimento nell'URL

Configurazione delle cartelle

Questa volta, voglio lasciare la funzione della cartella wwwroot, ma anche inserire il file di immagine in una cartella separata in modo che possa essere referenziato sul Web.

La configurazione della cartella del progetto deve essere la seguente, in modo da poter visualizzare i file di immagine nella cartella Contenuto di ogni sito in Aree.

In questo stato, l'URL .png il file in sample1.png

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

e

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

può sembrare che sarebbe, ma qui

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

a cui fare riferimento in .

A proposito, se si posiziona un file statico oltre alla cartella wwwroot, potrebbe mancare l'azione di compilazione del file. Se si continua a pubblicare, il file non verrà inserito, quindi assicurarsi di impostarlo di nuovo sul contenuto.

Aggiungere un programma

Per rendere disponibili i file statici nelle cartelle non Startup.Configure wwwroot, chiamare metodi aggiuntivi nel metodo come app.UseStaticFiles segue:

// 追加
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 La chiamata al metodo senza argomenti abilita la cartella wwwroot. È possibile aggiungere StaticFileOptions impostazioni aggiuntive passando al primo argomento.

StaticFileOptions.FileProvider Specifica la PhysicalFileProvider cartella fisica a cui si desidera che la proprietà si riferisca come file statico durante il passaggio di un'istanza di . Il file sotto il percorso specificato qui è un file a cui è possibile fare riferimento sul Web. Può anche essere la RequestPath radice dell'URL per le seguenti proprietà:

env.ContentRootPath La proprietà contiene il percorso radice (percorso fisico) del programma Web. È una buona idea combinarlo con il percorso relativo della cartella di destinazione.

StaticFileOptions.RequestPath La proprietà descrive il percorso radice dell'URL che fa riferimento al file statico. Il codice wwwroot https://<ホスト名> predefinito è basato su . Come nel codice RequestPath = "/Site1" precedente, se si scrive https://<ホスト名>/Site1 è la radice. In Areas/Site1/Content/xxxx questo modo il percorso fisico viene https://<ホスト名>/Site1/xxxx collegato all'URL.

Utilizzando sample1.png come esempio, Areas/Site1/Content/image/sample.png è possibile fare riferimento al file https://<ホスト名>/Site1/image/sample.png nel percorso.

Controllare l'operazione

index.html Posizionare il tag img in modo da poter vedere l'immagine come segue: Il percorso fa inoltre riferimento alle immagini site1 e site2 come definito.

<!-- 省略 -->

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

Se lo esegui e vedi l'immagine, è un successo.