Statische bestanden in andere mappen dan wwwroot plaatsen

Aanmaakdatum van pagina :

Milieu

Visuele studio
  • Visuele Studio 2019
ASP.NET Kern
  • 3.1 (De pagina van het scheermes, MVC)

Informatie over de standaardplaatsingslocatie voor statische bestanden

Statische bestanden (.js, .css, .png, enz.) worden standaard onder de map wwwroot geplaatst. Hierdoor kunnen websitegebruikers de .js- en .css bestanden rechtstreeks samen met HTML zien en op het scherm weergeven.

De standaardplaatsingsmap voor dit statische bestand is wwwroot Startup.Configure omdat het de volgende methode aanroept die in de methode wordt app.UseStaticFiles beschreven:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

Het pad van de fysieke map "wwwroot" is "https://<host name>/" in de URL. Het bestand in wwwroot\image\sample.png is bijvoorbeeld te vinden in de URL onder https://<host name>/image.png en sample.]

Bestanden die buiten de map wwwroot worden geplaatst, worden in wezen niet verwezen vanaf een URL op internet.

Statische bestanden naast de map wwwroot plaatsen en het referentiepad op de URL wijzigen

Mapconfiguratie

Deze keer wil ik de functie van de wwwroot-map verlaten, maar ook het afbeeldingsbestand in een aparte map plaatsen, zodat er op internet naar kan worden verwezen.

De mapconfiguratie van het project moet als volgt zijn, zodat u de afbeeldingsbestanden in de map Inhoud van elke site in De gebieden kunt zien.

In deze status wordt de URL .png het bestand in voorbeeld1.png

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

En

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

het lijkt misschien zo, maar hier

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

waarnaar moet worden verwezen in .

Trouwens, als u een statisch bestand naast de map wwwroot plaatst, ontbreekt mogelijk de buildactie van het bestand. Als u doorgaat met publiceren, wordt het bestand niet geplaatst, dus zorg ervoor dat u het terugzet naar inhoud.

Een programma toevoegen

Als u statische bestanden beschikbaar wilt maken in niet-wwwrootmappen, Startup.Configure roept u aanvullende methoden in de methode als volgt app.UseStaticFiles aan:

// 追加
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 Als u de methode zonder argumenten aanroept, wordt de map wwwroot gebruikt. U kunt extra instellingen toevoegen StaticFileOptions door door te gaan naar het eerste argument.

StaticFileOptions.FileProvider Hiermee geeft u de fysieke map op PhysicalFileProvider waarnaar de eigenschap moet verwijzen als een statisch bestand terwijl u een exemplaar van doorgeeft. Het bestand onder het pad dat hier is opgegeven, is een bestand waarnaar op internet kan worden verwezen. Het kan ook de hoofdmap van de URL zijn RequestPath voor de volgende eigenschappen:

env.ContentRootPath De eigenschap bevat het hoofdpad (fysiek pad) van het webprogramma. Het is een goed idee om dit te combineren met het relatieve pad naar de doelmap.

StaticFileOptions.RequestPath De eigenschap beschrijft het hoofdpad van de URL die naar het statische bestand verwijst. De standaard wwwroot https://<ホスト名> is gebaseerd op . Zoals in de RequestPath = "/Site1" bovenstaande code, als u schrijft https://<ホスト名>/Site1 is de wortel. Dit Areas/Site1/Content/xxxx koppelt het fysieke https://<ホスト名>/Site1/xxxx pad aan de URL.

Met voorbeeld1.png als Areas/Site1/Content/image/sample.png voorbeeld, kan naar het bestand in het pad worden https://<ホスト名>/Site1/image/sample.png verwezen.

Bewerking controleren

index.html Plaats de img-tag zo dat u de afbeelding als volgt kunt zien: Het pad verwijst ook naar site1- en site2-afbeeldingen zoals gedefinieerd.

<!-- 省略 -->

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

Als je het uitvoert en de afbeelding ziet, is het een succes.