Coloque archivos estáticos en carpetas distintas de wwwroot

Fecha de creación de la página :

medio ambiente

Estudio visual
  • Visual Studio 2019
Núcleo de ASP.NET
  • 3.1 (Página de Razor, MVC)

Acerca de la ubicación de ubicación predeterminada para los archivos estáticos

Los archivos estáticos (.js, .css, .png, etc.) se determinan que están en la carpeta wwwroot de forma predeterminada. Esto permite a los usuarios del sitio web ver los archivos de .js y .css directamente junto con HTML y reflejarlos en la pantalla.

La carpeta de ubicación predeterminada para este archivo estático es wwwroot Startup.Configure porque llama al siguiente método descrito en el app.UseStaticFiles método:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

La ruta de acceso de la carpeta física "wwwroot" es "https://<host name>/" en la dirección URL. Por ejemplo, el archivo en wwwroot\image\sample.png se puede encontrar en la dirección URL en https://<host name>/image.png amp; sample.]

Los archivos colocados fuera de la carpeta wwwroot esencialmente no se hace referencia desde una dirección URL en la Web.

Cómo colocar archivos estáticos además de la carpeta wwwroot y cambiar la ruta de referencia en la DIRECCIÓN URL

Configuración de carpetas

Esta vez, quiero dejar la función de la carpeta wwwroot, pero también colocar el archivo de imagen en una carpeta independiente para que se pueda hacer referencia a él en la Web.

La configuración de carpetas del proyecto debe ser la siguiente, de modo que pueda ver los archivos de imagen en la carpeta Contenido de cada sitio en Las áreas.

En este estado, la dirección URL .png el archivo en sample1.png

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

y

  • https://<Nombre de host>/site1/content/image/sample1.png

puede parecer que sería, pero aquí

  • https://<Nombre de host>/site1/image/sample1.png

para ser referenciado en .

Por cierto, si coloca un archivo estático además de la carpeta wwwroot, es posible que falte la acción de compilación del archivo. Si continúa publicando, el archivo no se colocará, así que asegúrese de volver a establecerlo en contenido.

Añadir un programa

Para que los archivos estáticos estén disponibles en carpetas que no sean Startup.Configure wwwroot, llame a métodos adicionales en el método de la siguiente app.UseStaticFiles manera:

// 追加
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 Llamar al método sin argumentos habilita la carpeta wwwroot. Puede agregar configuraciones adicionales StaticFileOptions pasando al primer argumento.

StaticFileOptions.FileProvider Especifica la PhysicalFileProvider carpeta física a la que desea que la propiedad haga referencia como un archivo estático mientras pasa una instancia de . El archivo bajo la ruta especificada aquí es un archivo al que se puede hacer referencia en la Web. También puede ser la RequestPath raíz de la dirección URL para las siguientes propiedades:

env.ContentRootPath La propiedad contiene la ruta de acceso raíz (ruta física) del programa Web. Es una buena idea combinar esto con la ruta relativa a la carpeta de destino.

StaticFileOptions.RequestPath La propiedad describe la ruta de acceso raíz de la dirección URL que hace referencia al archivo estático. La wwwroot predeterminada https://<ホスト名> se basa en . Al igual que en el RequestPath = "/Site1" código anterior, si escribe https://<ホスト名>/Site1 es la raíz. Esto Areas/Site1/Content/xxxx vincula la ruta de acceso física con la dirección https://<ホスト名>/Site1/xxxx URL.

Con sample1.png como ejemplo, Areas/Site1/Content/image/sample.png se puede hacer referencia al archivo https://<ホスト名>/Site1/image/sample.png en la ruta de acceso.

Comprobar la operación

index.html Coloque la etiqueta img para que pueda ver la imagen de la siguiente manera: La ruta también hace referencia a las imágenes site1 y site2 tal como se definen.

<!-- 省略 -->

<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 lo ejecutas y ves la imagen, es un éxito.