Placera statiska filer i andra mappar än wwwroot

Datum för skapande av sida :

Miljö

Visuell studio
  • Visual Studio 2019
ASP.NET kärna
  • 3.1 (Rakbladssida, MVC)

Om standardplaceringsplatsen för statiska filer

Statiska filer (.js, .css, .png osv.) bestäms som standard under mappen wwwroot. Detta gör det möjligt för webbplatsanvändare att .js .css filer direkt tillsammans med HTML och reflektera dem på skärmen.

Standardplaceringsmappen för den här statiska filen är wwwroot Startup.Configure eftersom den anropar följande app.UseStaticFiles metod som beskrivs i metoden:

public class Startup
{
  // 省略

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

    app.UseStaticFiles();

    // 省略
  }
}

Sökvägen till den fysiska mappen "wwwroot" är "https://<host name>/" i URL:en. Filen i wwwroot\image\sample.png finns till exempel i URL:en under https://<host name>/image.png amp; sample.]

Filer som placeras utanför wwwroot-mappen refereras i huvudsak inte från en URL på webben.

Så här placerar du statiska filer utöver wwwroot-mappen och ändrar referenssökvägen på WEBBADRESSen

Mappkonfiguration

Den här gången vill jag lämna funktionen i wwwroot-mappen, men också placera bildfilen i en separat mapp så att den kan refereras på webben.

Projektets mappkonfiguration ska vara följande, så att du kan se bildfilerna i mappen Innehåll på varje plats i Områdena.

I det här läget kan URL:en .png filen i exempel1.png

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

Och

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

det kan verka som det skulle vara, men här

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

som ska refereras i .

Förresten, om du placerar en statisk fil utöver wwwroot-mappen kan filens byggåtgärd saknas. Om du fortsätter att publicera placeras inte filen, så se till att ställa in den på innehåll igen.

Lägga till ett program

Om du vill göra statiska filer tillgängliga i mappar som inte är wwwroot Startup.Configure app.UseStaticFiles anropar du ytterligare metoder i metoden enligt följande:

// 追加
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 Genom att anropa metoden utan argument kan mappen wwwroot anropas. Du kan lägga till ytterligare StaticFileOptions inställningar genom att skicka till det första argumentet.

StaticFileOptions.FileProvider Anger den PhysicalFileProvider fysiska mapp som du vill att egenskapen ska referera till som en statisk fil när du skickar en förekomst av . Filen under sökvägen som anges här är en fil som kan refereras på webben. Det kan också vara RequestPath roten till URL:en för följande egenskaper:

env.ContentRootPath Egenskapen innehåller webbprogrammets rotsökväg (fysisk sökväg). Det är en bra idé att kombinera detta med den relativa sökvägen till målmappen.

StaticFileOptions.RequestPath Egenskapen beskriver rotsökvägen för url:en som refererar till den statiska filen. Standard wwwroot https://<ホスト名> baseras på . Som i RequestPath = "/Site1" koden ovan, om du skriver https://<ホスト名>/Site1 är roten. Detta Areas/Site1/Content/xxxx länkar den fysiska https://<ホスト名>/Site1/xxxx sökvägen med URL:en.

Med exempel .png exempel kan Areas/Site1/Content/image/sample.png filen https://<ホスト名>/Site1/image/sample.png refereras i sökvägen.

Kontrollera åtgärd

index.html Placera taggen img så att du kan se bilden på följande sätt: Sökvägen refererar också till site1- och site2-bilder enligt definitionen.

<!-- 省略 -->

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

Om du kör den och ser bilden blir det en succé.