一個Web站臺最基本的功能,就是在接收到從「瀏覽器傳入」的HTTP Request封包後,將站臺內所提供的靜態檔案(Static File),封裝成爲「服務器回傳」的HTTP Response封包內容,來提供給瀏覽器使用。web
在ASP.NET Core裏,內建了一個Middleware:StaticFileMiddleware,用來創建Web站臺提供靜態檔案的功能。這個Middleware會先剖析HTTP Request封包中的URL路徑、而後依照URL路徑計算並取得對應的File路徑下的檔案內容、接着再將該檔案內容封裝爲HTTP Response封包內容,用來提供給瀏覽器使用。json
而在StaticFileMiddleware裏,定義URL根路徑、File根路徑這兩個系統參數,來映像URL路徑所對應的File路徑。用以提供開發人員,靈活的去設定URL路徑與File路徑之間的關係。瀏覽器
在ASP.NET Core裏,要加入StaticFileMiddleware來提供靜態檔案功能。開發人員能夠先依照[ASP.NET Core] Getting Started這篇文章裏的步驟,來創建相關環境與基本程序代碼。接着在project.json裏掛載「Microsoft.AspNetCore.StaticFiles」的參考,後續就能使用這個參考裏,所提供的StaticFileMiddleware相關對象。服務器
{ "version": "1.0.0-*", "buildOptions": { "debugType": "portable", "emitEntryPoint": true }, "dependencies": {}, "frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0" }, "Microsoft.AspNetCore.StaticFiles": "1.0.0", "Microsoft.AspNetCore.Server.Kestrel": "1.0.0" }, "imports": "dnxcore50" } } }
完成project.json的相關設定以後,就能夠回過來修改「Program.cs」。在Microsoft.AspNetCore.StaticFiles裏,提供了UseStaticFiles Extension,讓開發人員能夠方便的掛載StaticFileMiddleware。在下列的範例程序代碼裏,示範如何透過UseStaticFiles來掛載StaticFileMiddleware。(在StaticFileMiddleware裏面,URL根路徑默認爲:「http://<Url>」、File根路徑默認爲:「file:\\<ContentRoot>\wwwroot」)。app
using System; using System.IO; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.FileProviders; namespace aspnetcoreapp { public class Program { public static void Main(string[] args) { // Build var host = new WebHostBuilder() // 設定Host內容的File根路徑 .UseContentRoot(Directory.GetCurrentDirectory()) // 設定啓動參數 .UseStartup<Startup>() // 開啓Kestrel聆聽HTTP .UseKestrel() // 設定聆聽的URL .UseUrls("http://localhost:5000") // 創建Host .Build(); // Run try { // 啓動Host host.Start(); // 等待關閉 Console.WriteLine("Application started. Press any key to shut down."); Console.ReadKey(); } finally { // 關閉Host host.Dispose(); } } } public class Startup { // Methods public void Configure(IApplicationBuilder app) { // 掛載StaticFilesMiddleware app.UseStaticFiles(); } } }
在StaticFileMiddleware裏面,File根路徑默認爲:「file:\\<ContentRoot>\wwwroot」。若是要變動默認的File根路徑,開發人員能夠使用ASP.NET Core所提供的UseWebRoot Extension來變動默認的File根路徑。在下列的範例程序代碼裏,示範如何透過UseWebRoot來變動默認的File根路徑。(範例執行時掛載的StaticFileMiddleware,URL根路徑一樣爲:「http://<Url>」、File根路徑變動爲:「file:\\<CurrentDirectory>\aaa」)。asp.net
using System; using System.IO; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.FileProviders; namespace aspnetcoreapp { public class Program { public static void Main(string[] args) { // Build var host = new WebHostBuilder() // 設定Web站臺的File根路徑 .UseWebRoot(Directory.GetCurrentDirectory() + @"\aaa") // 設定Host內容的File根路徑 .UseContentRoot(Directory.GetCurrentDirectory()) // 設定啓動參數 .UseStartup<Startup>() // 開啓Kestrel聆聽HTTP .UseKestrel() // 設定聆聽的URL .UseUrls("http://localhost:5000") // 創建Host .Build(); // Run try { // 啓動Host host.Start(); // 等待關閉 Console.WriteLine("Application started. Press any key to shut down."); Console.ReadKey(); } finally { // 關閉Host host.Dispose(); } } } public class Startup { // Methods public void Configure(IApplicationBuilder app) { // 掛載StaticFilesMiddleware app.UseStaticFiles(); } } }
除了使用預設參數掛載StaticFilesMiddleware以外,開發人員也能夠使用自定義參數來掛載StaticFilesMiddleware。若是要使用自定義參數來掛載StaticFilesMiddleware,開發人員能夠一樣使用UseStaticFiles Extension來使用自定義參數掛載StaticFilesMiddleware。在下列的範例程序代碼裏,示範如何透過UseStaticFiles來掛載StaticFilesMiddleware,而且定義其URL根路徑與File根路徑。(範例執行時掛載的StaticFileMiddleware,URL根路徑變動爲:「http://<Url>/bbb」、File根路徑變動爲:「file:\\<CurrentDirectory>\ccc」)。ide
using System; using System.IO; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.FileProviders; namespace aspnetcoreapp { public class Program { public static void Main(string[] args) { // Build var host = new WebHostBuilder() // 設定Host內容的File根路徑 .UseContentRoot(Directory.GetCurrentDirectory()) // 設定啓動參數 .UseStartup<Startup>() // 開啓Kestrel聆聽HTTP .UseKestrel() // 設定聆聽的URL .UseUrls("http://localhost:5000") // 創建Host .Build(); // Run try { // 啓動Host host.Start(); // 等待關閉 Console.WriteLine("Application started. Press any key to shut down."); Console.ReadKey(); } finally { // 關閉Host host.Dispose(); } } } public class Startup { // Methods public void Configure(IApplicationBuilder app) { // 掛載StaticFilesMiddleware app.UseStaticFiles(new StaticFileOptions() { // 設定URL根路徑 RequestPath = @"/bbb", // 設定File根目錄 FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory() + @"\ccc") }); } } }