.NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)--学习笔记(上)...
23 | 靜態文件中間件:前后端分離開發合并部署騷操作
我們先來看一下靜態文件中間件有哪些能力
1、支持指定相對路徑
2、支持目錄的瀏覽
3、支持設置默認文檔
4、支持多目錄映射
源碼鏈接:
https://github.com/witskeeper/geektime/tree/master/samples/StaticFilesDemo
首先使用靜態文件中間件
// 通過這一行代碼就可以訪問到靜態配置文件 app.UseStaticFiles();這樣就可以將 wwwroot 目錄映射出來,這是一個默認的配置,也就是說,當我們需要使用中間件靜態文件輸出的時候,首選就是應該把靜態文件放在 wwwroot 下面
我們在這個目錄下面放了幾個文件:index.html,app.js,a 目錄下面也有一個 index.html 和一個 a.js,這兩個 index.html 的內容是不一樣的
a/index.html
<!DOCTYPE html> <html> <head><meta charset="utf-8" /><title>/a/index</title><script src="a.js"></script> </head> <body><h1>這是/a/index</h1> </body> </html>index.html
<!DOCTYPE html> <html> <head><meta charset="utf-8" /><title>靜態首頁</title><script src="app.js"></script> </head> <body><h1>這是靜態首頁</h1> </body> </html>啟動程序,由于我們沒有指定相對路徑,所以說我們的根目錄是/,就代表訪問到了 wwwroot,輸入 index.html,可以看到 javaScript 執行
https://localhost:5001/index.html如果把地址換一下,會得到另一個頁面
https://localhost:5001/a/index.html如果默認情況下都是訪問 index.html,怎么做呢?
app.UseDefaultFiles();這個方法還有一個重載
namespace Microsoft.AspNetCore.Builder {public static class DefaultFilesExtensions{public static IApplicationBuilder UseDefaultFiles(this IApplicationBuilder app);public static IApplicationBuilder UseDefaultFiles(this IApplicationBuilder app,DefaultFilesOptions options);public static IApplicationBuilder UseDefaultFiles(this IApplicationBuilder app,string requestPath);} }DefaultFilesOptions
namespace Microsoft.AspNetCore.Builder {public class DefaultFilesOptions : SharedOptionsBase{public DefaultFilesOptions();public DefaultFilesOptions(SharedOptions sharedOptions);public IList<string> DefaultFileNames { get; set; }} }可以設置 DefaultFileNames,默認 index.html 是在里面的,所以這里可以不輸入任何參數
啟動程序,訪問根目錄的時候,應該輸出首頁的 index
https://localhost:5001/訪問 a 目錄會輸出 a 的 index
還有一種場景就是我們需要瀏覽我們的目錄
在 ConfigureServices 注冊 AddDirectoryBrowser
public void ConfigureServices(IServiceCollection services) {services.AddControllers();services.AddDirectoryBrowser(); }然后在 Configure 里面啟用
app.UseDirectoryBrowser();啟動程序,訪問根目錄
可以看到瀏覽器上面顯示了目錄的文件,當我們點擊其中的一個文件的時候,實際上是訪問這個文件,我們還可以瀏覽它的子目錄
這是我們在使用 wwwroot 的情況下,實際上我們還可以使用其他的目錄,把其他的目錄也注冊進來
我們在應用程序的 file 目錄下面另外添加了一個 page.html
<!DOCTYPE html> <html> <head><meta charset="utf-8" /><title>page</title> </head> <body><h1>page</h1> </body> </html>我們也期望可以訪問到這個文件,我們就可以這樣去做
app.UseStaticFiles();app.UseStaticFiles(new StaticFileOptions {// 注入我們的物理文件提供程序,把我們的當前目錄加 file,就是 file 目錄,賦值給我們的提供程序// 這樣子的效果就是我們的 wwwroot 會優先去尋找我們的文件,如果沒有的話就會執行下一個中間件// 然后在這個中間件里面再找我們的文件是否存在,如果沒有的話,它會去執行后面的路由和 MVC 的 Web API 的 ControllerFileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "file")) });因為這里我們入參并沒有設置相對路徑,也就是說我們根目錄對應的也是 file 這個目錄,我們這里可以輸出 page.html
https://localhost:5001/page.html我們的 page.html 就可以訪問到了
還有一種情況是我們希望把我們的靜態目錄映射為某一個特定的 URL 地址目錄下面,我們可以這樣去做
app.UseStaticFiles();app.UseStaticFiles(new StaticFileOptions {// 我們希望把我們的靜態目錄映射為某一個特定的 URL 地址目錄下面RequestPath = "/files",// 注入我們的物理文件提供程序,把我們的當前目錄加 file,就是 file 目錄,賦值給我們的提供程序// 這樣子的效果就是我們的 wwwroot 會優先去尋找我們的文件,如果沒有的話就會執行下一個中間件// 然后在這個中間件里面再找我們的文件是否存在,如果沒有的話,它會去執行后面的路由和 MVC 的 Web API 的 ControllerFileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "file")) });訪問以下路徑就可以看到我們的靜態文件頁面
https://localhost:5001/files/page.html也就是說我們可以把任意的文件目錄映射為任意的 URL 地址
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的.NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)--学习笔记(上)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#小游戏—钢铁侠VS太空侵略者
- 下一篇: 十问十答 Apache 许可证