Coloque arquivos estáticos em pastas diferentes do wwwroot

Data de criação de página :

ambiente

Estúdio Visual
  • Visual Studio 2019
Núcleo ASP.NET
  • 3.1 (Página de navalha, MVC)

Sobre o local de colocação padrão para arquivos estáticos

Arquivos estáticos (.js, .css, .png, etc.) estão determinados a estar sob a pasta wwwroot por padrão. Isso permite que os usuários do site vejam os arquivos .js e .css diretamente junto com HTML e reflita-os na tela.

A pasta de colocação padrão deste arquivo estático é wwwroot Startup.Configure porque ele chama o seguinte método descrito no app.UseStaticFiles método:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

O caminho da pasta física "wwwroot" é "https://<host name>/" na URL. Como exemplo, o arquivo em wwwroot\image\sample.png pode ser encontrado na URL em https://<host name>/image.png amp; sample.]

Os arquivos colocados fora da pasta wwwroot não são essencialmente referenciados a partir de uma URL na Web.

Como colocar arquivos estáticos além da pasta wwwroot e alterar o caminho de referência na URL

Configuração da pasta

Desta vez, quero deixar a função da pasta wwwroot, mas também colocar o arquivo de imagem em uma pasta separada para que possa ser referenciado na Web.

A configuração da pasta do projeto deve ser a seguinte, para que você possa ver os arquivos de imagem na pasta Conteúdo de cada site nas Áreas.

Neste estado, a URL .png o arquivo na amostra1.png

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

e

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

pode parecer que seria, mas aqui

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

a ser referenciado em .

A propósito, se você colocar um arquivo estático além da pasta wwwroot, a ação de compilação do arquivo pode estar faltando. Se você continuar a publicar, o arquivo não será colocado, por isso certifique-se de desvê-lo ao conteúdo.

Adicione um programa

Para disponibilizar arquivos estáticos em pastas não-wwwroot, Startup.Configure ligue para métodos adicionais app.UseStaticFiles no método da seguinte forma:

// 追加
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 Chamar o método sem argumentos permite a pasta wwwroot. Você pode adicionar configurações adicionais StaticFileOptions passando para o primeiro argumento.

StaticFileOptions.FileProvider Especifica a PhysicalFileProvider pasta física a que deseja que a propriedade se consulte como um arquivo estático ao passar por uma instância de . O arquivo no caminho especificado aqui é um arquivo que pode ser referenciado na Web. Também pode ser a RequestPath raiz da URL para as seguintes propriedades:

env.ContentRootPath A propriedade contém o caminho raiz (caminho físico) do programa Web. É uma boa ideia combinar isso com o caminho relativo para a pasta alvo.

StaticFileOptions.RequestPath A propriedade descreve o caminho raiz da URL que faz referência ao arquivo estático. O wwwroot padrão https://<ホスト名> é baseado em . Como no RequestPath = "/Site1" código acima, se você escrever https://<ホスト名>/Site1 é a raiz. Isso Areas/Site1/Content/xxxx vincula o caminho físico https://<ホスト名>/Site1/xxxx com a URL.

Usando a amostra1.png como exemplo, Areas/Site1/Content/image/sample.png o arquivo pode ser https://<ホスト名>/Site1/image/sample.png referenciado no caminho.

Verificar a operação

index.html Coloque a tag img para que você possa ver a imagem da seguinte forma: O caminho também faz referência às imagens do site1 e do site2 conforme definido.

<!-- 省略 -->

<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 você executá-lo e ver a imagem, é um sucesso.