ASP.NET Core 文件系统
緊接上一講?中間件?之后,今天來我們來講一下關(guān)于 ASP.NET? Core 中靜態(tài)文件服務(wù)。
什么是靜態(tài)文件?
先看一下下面例子(在客戶端瀏覽器中通過 url 路徑訪問了網(wǎng)站的一張圖片):
這樣的圖片就是一個(gè)靜態(tài)文件
靜態(tài)文件(staticfiles),其實(shí)就是指像?HTML、CSS、圖片?和?JavaScript?之類固定的文件,是會(huì)被應(yīng)用程序直接提供給客戶端的資源。
靜態(tài)文件通常位于web root(內(nèi)容根目錄或Web根目錄)文件夾下。有關(guān)?內(nèi)容根目錄?和?Web根目錄?的信息在第一講中介紹過。
?Web根目錄默認(rèn)為的是?Contentroot?路徑下的?wwwroot?文件夾。
?靜態(tài)文件中間件將默認(rèn)只讀取 Web根目錄和其子目錄中的文件。
?對(duì)于 Razor (.cshtml) 文件,波浪號(hào)斜杠?~/?指向 webroot。 以?~/?開頭的路徑稱為虛擬路徑。
內(nèi)容根目錄(Contentroot):是應(yīng)用程序所用到的所有內(nèi)容的根路徑。WebHost.CreateDefaultBuilder() 中默認(rèn)下把項(xiàng)目的當(dāng)前目錄設(shè)置為內(nèi)容根目錄,也就是指 web 的項(xiàng)目的文件夾,包括 bin 和 webroot 文件夾。
Web根目錄(webroot):項(xiàng)目中用于存放類似于 CSS、JS、圖片等公開、靜態(tài)資源的目錄。
靜態(tài)文件可以保存在 Web根目錄(默認(rèn)為wwwroot) 下的任意文件夾內(nèi),并通過相對(duì)根的路徑來訪問。例如當(dāng)你通過 VisualStudio 創(chuàng)建一個(gè)默認(rèn)的 Web應(yīng)用程序(MVC)項(xiàng)目時(shí),在?wwwroot?目錄下會(huì)多出幾個(gè)文件夾:css、images以及js。
通過下面的URL就能夠直接訪問 images 目錄下的圖片:
http://<app>/images/<imageFileName>
http://localhost:7819/images/banner1.svg
靜態(tài)文件中間件
如上例子,為了能夠使用靜態(tài)文件的服務(wù),必須配置中間件,把靜態(tài)文件中間件加入到請(qǐng)求管道內(nèi)。(默認(rèn)創(chuàng)建的 MVC Web應(yīng)用程序已經(jīng)配置了)
靜態(tài)文件中間件可通過下述方法來配置:在項(xiàng)目中增加?MicrosoftAspNetCore.StaticFiles?包依賴,然后從Startup.Configure?中調(diào)用?app.UseStaticFiles?擴(kuò)展方法:
app.UseStaticFiles();
}?
上面我們通過一個(gè)簡(jiǎn)單的實(shí)例使用?app.UseStaticFiles()?來使用文件中間件,使得Web根目錄下的所有靜態(tài)文件直接發(fā)布出來。如果我們需要發(fā)布的靜態(tài)文件存儲(chǔ)在其他目錄下呢?依舊是這個(gè)應(yīng)用,現(xiàn)在我們將靜態(tài)文件放在自定義文件夾 MyStaticFiles 內(nèi),并將以Web的形式發(fā)布出來,展示如何通過使用?UseStaticFiles將其他非wwwroot目錄下的內(nèi)容也向外提供服務(wù)。
<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36" version="8.5.3" editor="www.draw.io" type="device"><diagram>7Vtdk5owFP01PnaHEEB9rPbroZ3pdDvT5ygR00ZCQyxuf31vIBHZ6K6tQN1ddpydcMNHcs89h9wbHeH5Zvdekmz9ScSUj3wv3o3wm5HvY8+D/9pwVxkCNK4MiWRxZfJqwy37TSsjstYti2neOFEJwRXLjBFVxqVIU7pUjROJlKJoXrsSPG5cl5GEOobbJeGu9RuL1bqyTvxxbf9AWbI2T0YomlY9C7L8kUixTc3zRj5elX9V94bYe5mR5WsSi+LAhN+O8FwKoarWZjenXLu26bZ3J3r345Y0Vedc4FcX/CJ8S+2Iy3GpO+sLGGKmm3BTxQj/Av4maaJ7Z0pk0OFBi9OVMk1p/KLbC6GU2JgDwlmSQrs6d/aLwv3A5a+NubzZbMU4nwsuJFhSkeqn5BlZsjT5WD0i8mrTF/OoAEwC7rfipS/XLI5pqociFFFkUc5EX5YJlqoyNMIZfMA1c+8mHIUwzTkco/oYPvp0qeYizZUkrHQnJbkqaK5HH0uRfSUyoXaqK5EqE8gIYJy5SBhw9Lzp7sBkkHlPxYYqeQenmN7QBIkl0WRSHRd1SCIbSOuDcPQjwwTDgmR/5zoSoGGC4Xhg4IsCo3SGOROdCpRGcBzB/ax4aQZH0FZsPAa/nrOZ2+PA+yeA3+uXGUZDAxoBcYB4GHUDePA44JxVfFRS/NjrIvon8DYAAz8g99cyQF4hB1HsIoqPoMfJgvLPImeKCX1/I0J/iWoHHEZe1CRxhBwSW98fQjq5HNFw0PYno+0hwv1pezRoe2vaHp4A/qq0fTwowZNRAjzpUQkmgxK0pgTjE8BflRJMByV4MkoQeNP+lMBWXgYpaEEKpieQvyopQMhBvCiKsvTkR1zPeSGhlaj9FA9CAeal7Wu14cYrVVZ4D9EHQF6Ct6h8KDUs1kzRWwBXP7OQJCtB3KYxjQ2ELXAO4Xv5WRg6pAuOcc5rAQE354bwUzCZl4aCrWzZNVDk9QfCGWnyUPhoofBxZF3bUeEDuQnup7tb8BtbvmOc5s+XRyiYNp0+HvdHpDOSiYFIf4+p743vESnojUhuuqBgnjdZmjxfDvk4/G8c8s9YhQ8cuvxlhKd+Xxzy3WX2gqXPlz7Ihuy+ntXfgto+eqBPx2s5u8LqgT7uRrRYfH859Ak8d9O/M/q4qdBnKTLtj+e9aEZNl2N3i7Yzl1+2FzcUZHstyGL3VdZZQfbCTbuhINv4Bk50AvqrqsheuB03iEGvYnCkRtmdGFy2bzeIQUMMJiegvyoxwG7e6EA+5DIt5DLYXWB3lMvgY+mp2eRpABv93Ao7/Vd5Of/XcAIKsl3daXeFbtyNoodMMMhFvaH0craYEGqWxkOLRg+rfHzGt6kHLl/O5dDrrS6B3b1bBgG7uymZcs0sOvLac0B4IFe+twqaut9RaYlFcFj/DqbsO/itEX77Bw==</diagram></mxfile>
如果要訪問 MyStaticFiles 文件夾下的 test.png 圖片,可以這樣配置靜態(tài)文件中間件:
public void Configure(IApplicationBuilder app, IHostingEnvironment env){app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = new PathString("/StaticFiles"),
});
}
ASP.NET Core 一般情況下都是利用一個(gè)FileProvider 對(duì)象來讀取文件的,它在處理針對(duì)靜態(tài)文件的請(qǐng)求是也不例外。
上邊代碼在靜態(tài)文件中間件中,在調(diào)用靜態(tài)文件中間件的方法 UseStaticFiles(),該方法可接受一個(gè)配置項(xiàng)對(duì)象 StaticFileOptions,其內(nèi)部具有一個(gè) FileProvider 和請(qǐng)求路徑的映射關(guān)系。
如果調(diào)用 UseStaticFiles方法沒有指定任何的參數(shù),那么這個(gè)映射關(guān)系的請(qǐng)求路徑就是應(yīng)用的基地址(PathBase),而FileProvider自然就是指向WebRoot目錄的PhysicalFileProvider。
通過訪問 http://<app>/StaticFiles/test.png,這樣就能訪問到 test.png 圖片文件了。
靜態(tài)文件授權(quán) :
靜態(tài)文件中間件默認(rèn)不提供授權(quán)檢查。任何通過該模塊提供訪問的文件,包括位丁 wwwroot 下的文件都是公開的,那么如何給文件提供授權(quán)呢?
將文件保存在 wwwroot 之外,并將目錄設(shè)置為可被靜態(tài)文件中間件訪問到,同時(shí)通過一個(gè) controller action 來訪問,通過授權(quán)后返回HleResulU將文件保存在wwwroot之外,并將目錄設(shè)置為可被靜態(tài)文件中間件訪問到,同時(shí)通過一個(gè)itrolleraction來訪問,通過授權(quán)后返回 FileResult。
目錄瀏覽
以上通過注冊(cè)的 StaticFileMiddleware 只會(huì)處理針對(duì)某個(gè)具體靜態(tài)文件的請(qǐng)求,如果我們向某個(gè)目錄的URL發(fā)送HTTP請(qǐng)求,得到的將是一個(gè)狀態(tài)為404的響應(yīng)。那是因?yàn)榛诎踩紤],默認(rèn)情況下應(yīng)用程序是禁用目錄訪問功能的。目錄瀏覽就是允許網(wǎng)站用戶看到指定目錄下的目錄和文件列表。我們可以通過注冊(cè)一個(gè)名為DirectoryBrowserMiddleware 的中間件來顯示請(qǐng)求目錄的內(nèi)容:
Step1. 在Startup.ConfigureServices?中調(diào)用?AddDirectoryBrowser?擴(kuò)展方法添加目錄瀏覽服務(wù):
public void ConfigureServices(IServiceCollection services){services.AddDirectoryBrowser();
}
Step2. 然后在?Startup.Configure?中調(diào)用?UseDirectoryBrowser?擴(kuò)展方法使用中間件來開啟網(wǎng)絡(luò)應(yīng)用目錄瀏覽:
public void Configure(IApplicationBuilder app, IHostingEnvironment env){app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = new PathString("/StaticFiles"),
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = new PathString("/StaticFiles"),
});
}
運(yùn)行程序后,就可以通過訪問 http:<app>/StaticFiles 來瀏覽 ContentRoot/StaticFiles 文件夾中的目錄了。這個(gè)中間件會(huì)返回一個(gè)HTML頁面,將請(qǐng)求目錄下的所有文件將以表格的形式包含在這個(gè)頁面中(包括該文件夾下的每一個(gè)文件夾與文件)
注意:使用靜態(tài)文件和目錄瀏覽的區(qū)別,上述Step2.Startup.Configure方法中調(diào)用了兩個(gè)?app.UseStaticFiles:第一個(gè)調(diào)用允許請(qǐng)求 wwwroot 文件夾下的靜態(tài)文件,第二個(gè)調(diào)用則是允許通過 http:<app>/StaticFiles/<fileName> 請(qǐng)求 StaticFiles 文件夾中的靜態(tài)文件,調(diào)用?app.UseDirectoryBrowser?則是允許通過 http:<app>/StaticFiles 請(qǐng)求瀏覽 StaticFiles 文件夾的目錄。
注冊(cè)指定目錄的瀏覽
? app.UseDirectoryBrowser?方法可接受一個(gè)配置項(xiàng)對(duì)象 DirectoryBrowserOptions,該對(duì)象與靜態(tài)文件中間件配置項(xiàng)對(duì)象相似,通過該對(duì)象可以配置允許用戶瀏覽的目錄和請(qǐng)求的虛擬路徑。
?
默認(rèn)文件
設(shè)置默認(rèn)首頁能給站點(diǎn)的每個(gè)訪問者提供一個(gè)默認(rèn)起始頁。為了使站點(diǎn)能夠提供默認(rèn)頁面,避免用戶輸入完整URL,我們可以在?Startup.Configure?中調(diào)用?app.UseDefaultFiles?擴(kuò)展方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){app.UseDefaultFiles();
app.UseStaticFiles();
}
app.UseDefaultFiles?必須是在?UseStaticFiles?之前調(diào)用。UseDefaultFiles只是重寫了URL,而不是真的提供了這樣一個(gè)文件。因此必須開啟靜態(tài)文件中間件(UseStaticFiles)來提供這個(gè)文件。
通過 UseDefanltFiles,請(qǐng)求文件夾的時(shí)候?qū)z索以下文件:
default.htm
default.html
index.htm
index.html
列表中第一個(gè)被找到的文件將返回給用戶,作為該完整URL的請(qǐng)求的應(yīng)答,而此時(shí)瀏覽器上URL將繼續(xù)顯示用戶輸入的URI。
指定默認(rèn)文件
靜態(tài)文件中間件可以接受一個(gè) DefaultFilesOptions 的配置對(duì)象參數(shù),通過添加默認(rèn)主頁名稱,可以指定自定義的默認(rèn)文件(默認(rèn)首頁),下面的代碼展示如何將默認(rèn)文件名改為 myindex.html
public void Configure(IApplicationBuilder app){
DefaultFilesOptions options = new DefaultFilesOptions();
options.DefaultFileNames.Clear(); // 清除默認(rèn)文件
options.DefaultFileNames.Add("login.html"); //添加指定文件為默認(rèn)文件
app.UseDefaultFiles(options); //使用默認(rèn)文件中間件
app.UseStaticFiles(); //使用靜態(tài)文件中間件(必須)
}
在 web根目錄中添加好 login.html 頁面,運(yùn)行程序:
UseFileServer
UseFileServer?集合了?UseStaticFiles、UseDefaultFiles以及UseDirectoryBrowser。
下面的代碼啟用了靜態(tài)文件和默認(rèn)文件,但不允許直接訪問目錄:
下面的代碼啟用了靜態(tài)文件、默認(rèn)文件和目錄瀏覽功能:
app.UseFileServer(enableDirectoryBrowsing:true);作為一個(gè)集合了UseStaticFiles、UseDefaultFiles和UseDirectoryBrowser方法于一體的方法,如果希望提供 web根目錄之外存在的文件,則需要實(shí)例化并配置一個(gè)?FileServerOptions?對(duì)象傳遞給app.UscFileServer?的參數(shù)。例如,在應(yīng)用中有如下層次的目錄:
<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36" version="8.5.3" editor="www.draw.io" type="device"><diagram>7Vtdk5owFP01PnaHEEB9rPbroZ3pdDvT5ygR00ZCQyxuf31vIBHZ6K6tQN1ddpydcMNHcs89h9wbHeH5Zvdekmz9ScSUj3wv3o3wm5HvY8+D/9pwVxkCNK4MiWRxZfJqwy37TSsjstYti2neOFEJwRXLjBFVxqVIU7pUjROJlKJoXrsSPG5cl5GEOobbJeGu9RuL1bqyTvxxbf9AWbI2T0YomlY9C7L8kUixTc3zRj5elX9V94bYe5mR5WsSi+LAhN+O8FwKoarWZjenXLu26bZ3J3r345Y0Vedc4FcX/CJ8S+2Iy3GpO+sLGGKmm3BTxQj/Av4maaJ7Z0pk0OFBi9OVMk1p/KLbC6GU2JgDwlmSQrs6d/aLwv3A5a+NubzZbMU4nwsuJFhSkeqn5BlZsjT5WD0i8mrTF/OoAEwC7rfipS/XLI5pqociFFFkUc5EX5YJlqoyNMIZfMA1c+8mHIUwzTkco/oYPvp0qeYizZUkrHQnJbkqaK5HH0uRfSUyoXaqK5EqE8gIYJy5SBhw9Lzp7sBkkHlPxYYqeQenmN7QBIkl0WRSHRd1SCIbSOuDcPQjwwTDgmR/5zoSoGGC4Xhg4IsCo3SGOROdCpRGcBzB/ax4aQZH0FZsPAa/nrOZ2+PA+yeA3+uXGUZDAxoBcYB4GHUDePA44JxVfFRS/NjrIvon8DYAAz8g99cyQF4hB1HsIoqPoMfJgvLPImeKCX1/I0J/iWoHHEZe1CRxhBwSW98fQjq5HNFw0PYno+0hwv1pezRoe2vaHp4A/qq0fTwowZNRAjzpUQkmgxK0pgTjE8BflRJMByV4MkoQeNP+lMBWXgYpaEEKpieQvyopQMhBvCiKsvTkR1zPeSGhlaj9FA9CAeal7Wu14cYrVVZ4D9EHQF6Ct6h8KDUs1kzRWwBXP7OQJCtB3KYxjQ2ELXAO4Xv5WRg6pAuOcc5rAQE354bwUzCZl4aCrWzZNVDk9QfCGWnyUPhoofBxZF3bUeEDuQnup7tb8BtbvmOc5s+XRyiYNp0+HvdHpDOSiYFIf4+p743vESnojUhuuqBgnjdZmjxfDvk4/G8c8s9YhQ8cuvxlhKd+Xxzy3WX2gqXPlz7Ihuy+ntXfgto+eqBPx2s5u8LqgT7uRrRYfH859Ak8d9O/M/q4qdBnKTLtj+e9aEZNl2N3i7Yzl1+2FzcUZHstyGL3VdZZQfbCTbuhINv4Bk50AvqrqsheuB03iEGvYnCkRtmdGFy2bzeIQUMMJiegvyoxwG7e6EA+5DIt5DLYXWB3lMvgY+mp2eRpABv93Ao7/Vd5Of/XcAIKsl3daXeFbtyNoodMMMhFvaH0craYEGqWxkOLRg+rfHzGt6kHLl/O5dDrrS6B3b1bBgG7uymZcs0sOvLac0B4IFe+twqaut9RaYlFcFj/DqbsO/itEX77Bw==</diagram></mxfile>
對(duì)于上面這個(gè)層次結(jié)構(gòu)的示例,你可能需耍啟用靜態(tài)文件、默認(rèn)文件以及瀏覽 MyStaticFiles 目錄等功能。下面的代碼片段演示了如何通過調(diào)用一次?FileServerOptions?來完整實(shí)現(xiàn)這些功能:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = new PathString("/StaticFiles"),
EnableDirectoryBrowsing = true,
EnableDefaultFiles = true,
});
}
如果將?enableDirectoryBrowsing設(shè)置為true,則必須要在?Startup.ConfigureServices?中調(diào)用?services.AddDirectoryBrowser?擴(kuò)展方法:
public void ConfigureServices(IServiceCollection services){services.AddDirectoryBrowser();
}
如果在 MyStaticFiles 目錄下存在默認(rèn)頁面,則打開默認(rèn)頁面。如果沒有默認(rèn)命名的文件,則http://StaticFiles將返回目錄 StaticFiles 的目錄列表,如下圖所示。
StaticFiles中存在默認(rèn)頁面
StaticFiles中不存在默認(rèn)頁面
FileExtensionContentTypeProvider
FileExtensionContentTypeProvider?類內(nèi)包含一個(gè)將文件擴(kuò)展名映射到?MIME內(nèi)容類型的集合。在下面的例子中,將多個(gè)文件擴(kuò)展名(如:.myapp)注冊(cè)為已知的MIME類型(application/x-msdownload),“.rtf”被替換,“.mp4”被移除:
public void Configure(IApplicationBuilder app){FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
provider.Mappings[".myapp"] = "application/x-msdownload";
provider.Mappings[".htm3"] = "text/html";
provider.Mappings[".image"] = "image/png";
provider.Mappings[".rtf"] = "application/x-msdownload";
provider.Mappings.Remove(".mp4");
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = new PathString("/StaticFiles"),
ContentTypeProvider = provider,
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = new PathString("/StaticFiles"),
});
}
非標(biāo)準(zhǔn)的內(nèi)容類型
ASP.NET?Core 靜態(tài)文件中間件能夠支持超過400多種己知的文件內(nèi)容類型。如果用戶請(qǐng)求一個(gè)未知的文件類型,靜態(tài)文件中間件將返 HTTP404(未找到)響應(yīng)。如果啟用目錄瀏覽,則該文件的URL將會(huì)被顯示,但訪問URL會(huì)返回一個(gè) HTTP404 錯(cuò)誤。下面則通過代碼把不能識(shí)別的類型和文件作為下載的文件處理:
public void Configure(IApplicationBuilder app){app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = new PathString("/StaticFiles"),
ServeUnknownFileTypes = true,
DefaultContentType = "application/x-msdownload",
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = new PathString("/StaticFiles"),
});
}
注意事項(xiàng):
UseDirectoryBrowser 和 UseStaticFiles 可能會(huì)泄密。建議不要在生產(chǎn)環(huán)境開啟目錄瀏覽。要小心那些被你開啟了 UseStaticFiles 或 UseDirectoryBrowser 的目錄,它們的子文件及子目錄都可被訪問。建議將公開內(nèi)容放在<content root>/wwwroot 這樣的目錄中,遠(yuǎn)離應(yīng)用程視圖、配置文件等。
使用 UseDirectoryBrowser 和 UseStaticFiles 暴露的文件的 URL是否區(qū)分大小寫以及字符限制,受制于底層文件系統(tǒng)。比如Windows是不區(qū)分大小寫的,但MACOS和Linux則區(qū)分大小寫。
實(shí)戰(zhàn)簡(jiǎn)單文件服務(wù)器
① 首先新建一個(gè)ASP.NETCore項(xiàng)目,選擇空的模板。
② 使用NuGet命令添加Microsoft.AspNetCore.StaticFiles引用:
③ 如果我們的文件服務(wù)器需要能訪問和瀏覽E盤的所有文件與文件夾,那么我們就需要用到?UseStaticFiles和?UseDirectoryBrowser?方法了,在?Startup.Configure?方法下添加如下代碼:
public void Configure(IApplicationBuilder app){FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
provider.Mappings[".log"] = "text/plain";
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(@"E:\"), // 指定靜態(tài)文件目錄
ServeUnknownFileTypes = true,
ContentTypeProvider = provider,
DefaultContentType = "application/x-msdownload", // 設(shè)置未識(shí)別的MIME類型一個(gè)默認(rèn)z值
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{
FileProvider = new PhysicalFileProvider(@"E:\"), // 制定目錄,這里指定 E盤,也可以是其他目錄
});
}
然后運(yùn)行程序,這里選擇使用 Kestrel,訪問:http://<ip>:5000/,如下圖所示:
這樣我們就能通過客戶端瀏覽服務(wù)器E盤的所有文件及文件夾了。我們還手動(dòng)設(shè)置了未識(shí)別的 MIME 類型一個(gè)默認(rèn)值("application/x-msdownload"),當(dāng)瀏覽器打開這些未識(shí)別類型的文件,就會(huì)下載這些文件。像?.log?這樣的文件就被手動(dòng)設(shè)置為文本方式,瀏覽器會(huì)直接展示出來。這樣我們也就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的文件服務(wù)器。
如果想用局域網(wǎng)內(nèi)其他電腦或手機(jī)查看圖片或視頻文件,則修改Properties文件下 launchSettings.json 配置文件中的應(yīng)用程序URL就可以實(shí)現(xiàn):
"WebApplication": {"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://*:5001;http://*:5000", // 這樣就可以通過 http:ip:5000訪問
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
這樣在同一局域網(wǎng)內(nèi),在手機(jī)上訪問 http:ip:5000,就能訪問服務(wù)器E盤中的文件了。
參考原文
Microsoft 文檔 ASP.NET Core 中間件
ASP.NET Core 中間件(Middleware)詳解
原文地址:https://www.cnblogs.com/anayigeren/p/10282441.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 文件系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开箱即用Bumblebee独立部署搭建w
- 下一篇: 如何使用vs将asp.net core项