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