ASP.NET Core6.0-wwwroot資料夾無法訪問解決方法

一只奋斗的小小鸟發表於2024-08-30

預設情況下,ASP.NET Core專案中的wwwroot資料夾被視為Web根資料夾。靜態檔案可以儲存在Web根目錄下的任何資料夾中,並可以使用該根目錄的相對路徑進行訪問。在ASP.NET應用程式中,可以從應用程式的根資料夾或其下的任何其他資料夾提供靜態檔案。這已在ASP.NET Core中更改。現在,只有Web根目錄-wwwroot資料夾中的那些檔案才能透過http請求提供。其他所有檔案均被阻止,預設情況下無法提供。通常,在wwwroot資料夾中應有用於不同型別的靜態檔案(例如JavaScript,CSS,影像,庫指令碼等)的單獨資料夾,如下所示。

但是,如果想要靜態檔案能夠被正常訪問到,我們還必須在Startup.cs中配置中介軟體以將靜態檔案新增到管道中。將對Microsoft.AspNetCore.StaticFiles包的依賴項新增到專案中,然後Startup.Configure呼叫擴充套件方法UseStaticFiles

重新命名wwwroot資料夾

我們可以根據自己的選擇將wwwroot資料夾重新命名為任何其他名稱,並在program.cs中準備託管環境時將其設定為Web根。例如,讓我們將wwwroot資料夾重新命名為Content資料夾。現在,在Program類的Main()方法中呼叫UseWebRoot()方法將Content資料夾配置為Web根資料夾,如下所示。

訪問wwwroot資料夾之外的靜態檔案

假設這有一個專案層次結構,其中要提供的靜態檔案不在wwwroot的範圍內。

對於訪問自拍.png的請求,需要配置靜態檔案中介軟體,如下所示:

複製程式碼
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){
    app.UseStaticFiles();
    app.UseStaticFiles(new StaticFileOptions()    {   
       FileProvider = new PhysicalFileProvider(            
Path.Combine(Directory.GetCurrentDirectory(), @"其他靜態檔案")),
RequestPath = new PathString("/StaticFiles")
});
}
複製程式碼

請求http://localhost:xxxx/StaticFiles/自拍.png將訪問到自拍.png檔案。

啟用目錄瀏覽

目錄瀏覽允許Web應用程式使用者檢視指定目錄中的目錄和檔案列表。出於安全原因,預設情況下禁用目錄瀏覽。要啟用目錄瀏覽,請從Startup.Configure中呼叫擴充套件方法UseDirectoryBrowser

並透過從Startup.ConfigureServices呼叫AddDirectoryBrowser擴充套件方法來 新增所需的服務

上面的程式碼允許使用URL http://localhost:xxxx/images/瀏覽wwwroot/images資料夾的目錄,並帶有指向每個檔案和資料夾的連結:

提供預設文件

設定預設主頁將為網站訪問者提供一個訪問網站的起點。為了使Web應用程式無需使用者完全限定URI即可提供預設頁面,請在Startup.Configure中呼叫擴充套件方法UseDefaultFiles。

public void Configure(IApplicationBuilder app){    
app.UseDefaultFiles(); app.UseStaticFiles(); }

使用UseDefaultFiles,對資料夾的請求將搜尋:

  • default.htm
  • default.html
  • index.htm
  • index.html

從列表中找到的第一個檔案將作為預設起始頁面。

相關文章