var app = WebApplication.Create(); app.UseStaticFiles(); app.Run();演示程序运行之后,就可以通过GET请求的方式来读取对应文件的内容,目标文件相对于WebRoot目录的路径就是对应URL的路径,如JPG图片文件“~/wwwroot/img/dolphin1.jpg”对应的URL路径为“/img/dolphin1.jpg”。如果直接利用浏览器访问这个URL,目标图片就会直接以图2所示的形式显示出来。
using Microsoft.Extensions.FileProviders; var path = Path.Combine( Directory.GetCurrentDirectory(), "doc"); var options = new StaticFileOptions { FileProvider = new PhysicalFileProvider(path), RequestPath = "/documents" }; var app = WebApplication.Create(); app .UseStaticFiles() .UseStaticFiles(options); app.Run();按照上面这段程序指定的映射关系,对于存储在“~/doc/”目录下的这个PDF文件(checklist.pdf),请求URL采用的路径就应该是“/documents/checklist.pdf”。如果利用浏览器请求这个地址时,PDF文件的内容就会按照图4所示的形式显示在浏览器上。
using Microsoft.Extensions.FileProviders; var path = Path.Combine( Directory.GetCurrentDirectory(), "doc"); var fileProvider = new PhysicalFileProvider(path); var fileOptions = new StaticFileOptions { // 堆代码 duidaima.com FileProvider = fileProvider, RequestPath = "/documents" }; var diretoryOptions = new DirectoryBrowserOptions { FileProvider = fileProvider, RequestPath = "/documents" }; var app = WebApplication.Create(); app .UseStaticFiles() .UseStaticFiles(fileOptions) .UseDirectoryBrowser() .UseDirectoryBrowser(diretoryOptions); app.Run();当上面的应用启动之后,如果利用浏览器向针对某个目录的URL(如“/”或者“/img”)发起请求,目标目录的内容(包括子目录和文件)就会以图5所示的形式显示在一个表格中。可以看出在呈现的表格中,当前目录的子目录和文件均会显示为链接。
using Microsoft.Extensions.FileProviders; var path = Path.Combine(Directory.GetCurrentDirectory(), "doc"); var fileProvider = new PhysicalFileProvider(path); var fileOptions = new StaticFileOptions { FileProvider = fileProvider, RequestPath = "/documents" }; var diretoryOptions = new DirectoryBrowserOptions { FileProvider = fileProvider, RequestPath = "/documents" }; var defaultOptions = new DefaultFilesOptions { RequestPath = "/documents", FileProvider = fileProvider, }; var app = WebApplication.Create(); app .UseDefaultFiles() .UseDefaultFiles(defaultOptions) .UseStaticFiles() .UseStaticFiles(fileOptions) .UseDirectoryBrowser() .UseDirectoryBrowser(diretoryOptions); app.Run();下面在“~/wwwroot/img/”和“~/doc”目录下分别创建一个名为index.html的默认页面,并且在该.html文件的主体部分指定一段简短的文字(This is an index page!)。我们在应用启动之后利用浏览器访问这两个目录(“/img”和“/documents”),默认页面就会以图6的形式显示出来。
我们须将DefaultFilesMiddleware中间件放在StaticFileMiddleware和DirectoryBrowserMiddleware中间件之前。这是因为DirectoryBrowserMiddleware和DefaultFilesMiddleware中间件处理的均是针对目录的请求,如果先注册DirectoryBrowserMiddleware中间件,那么显示的总是目录的结构。
如果先注册用于显示默认页面的DefaultFilesMiddleware中间件,那么在默认页面不存在的情况下它会将请求分发给后续中间件,此时DirectoryBrowserMiddleware中间件将当前目录的结构呈现出来。要先于StaticFileMiddleware中间件之前注册DefaultFilesMiddleware中间件是因为后者是通过采用URL重写的方式实现的。这个中间件会将针对目录的请求改写成针对默认页面的请求,而最终针对默认页面的请求还需要依赖StaticFileMiddleware中间件来完成。
using Microsoft.Extensions.FileProviders; var path = Path.Combine( Directory.GetCurrentDirectory(), "doc"); var fileProvider = new PhysicalFileProvider(path); var fileOptions = new StaticFileOptions { FileProvider = fileProvider, RequestPath = "/documents" }; var diretoryOptions = new DirectoryBrowserOptions { FileProvider = fileProvider, RequestPath = "/documents" }; var defaultOptions1 = new DefaultFilesOptions(); var defaultOptions2 = new DefaultFilesOptions { RequestPath = "/documents", FileProvider = fileProvider, }; defaultOptions1.DefaultFileNames.Add("readme.html"); defaultOptions2.DefaultFileNames.Add("readme.html"); var app = WebApplication.Create(); app .UseDefaultFiles(defaultOptions1) .UseDefaultFiles(defaultOptions2) .UseStaticFiles() .UseStaticFiles(fileOptions) .UseDirectoryBrowser() .UseDirectoryBrowser(diretoryOptions); app.Run();设置默认的媒体类型
var options = new StaticFileOptions { ServeUnknownFileTypes = true, DefaultContentType = "image/jpg" }; var app = WebApplication.Create(); app.UseStaticFiles(options); app.Run();映射文件扩展名的媒体类型
using Microsoft.AspNetCore.StaticFiles; var contentTypeProvider = new FileExtensionContentTypeProvider(); contentTypeProvider.Mappings.Add(".img", "image/jpg"); var options = new StaticFileOptions { ContentTypeProvider = contentTypeProvider }; var app = WebApplication.Create(); app.UseStaticFiles(options); app.Run();