受欢迎的博客标签

asp.net core系列-静态文件目录的操作

Published

Introduction


In this tutorial you’ll set up and deploy a production-ready ASP.NET Core application with Static files are stored within the project's web root directory.

How it works

Remember the relationships.

OS/ ubuntu server 18.04-x64 Solution Folder

ASP.NET Core  web application---------- Static files in ASP.NET Core
 ├──ASP.NET Core  web applications app.UseStaticFiles(new StaticFileOptions())
 │   ├── staticFileOptions.FileProvider                    <- ---------- Serve files outside of web root
 │   ├── staticFileOptions.ContentTypeProvider    <--- The ASP.NET Core Runtime enables you  serves as a mapping of file extensions to MIME content types.
 │   ├── staticFileOptions.DefaultContentType           <--- The Desktop Runtime enables you to run existing Windows desktop applications.
 │   └── staticFileOptions.ServeUnknownFileTypes                   <---  enables serving Non-standard content types.
 ├── app.UseDirectoryBrowser(new DirectoryBrowserOptions)  <---- Directory browsing allows directory listing within specified directories.
 │   ├── nongodb server
 │   └── redis server
 ├── ASP.NET Core  web applications app.UseDefaultFiles(new DefaultFilesOptions())  <---- Setting a default page provides visitors a starting point on a site. To serve a default page from wwwroot without a fully qualified URI
 │   ├── default.htm
 │   ├──default.html
 │   ├──index.htm
 │   ├──index.html
 ├── ASP.NET Core  web applications app.UseFileServer(new  FileServerOptions())  <---- UseFileServer combines the functionality of UseStaticFiles, UseDefaultFiles, and UseDirectoryBrowser.
 │   ├── nongodb server
 │   └── redis server

 

asp.net core项目静态文件服务由三·大部分组成

 app.UseStaticFiles(): StaticFileMiddleware中间件,提供wwwroot目录下的静态文件服务。提供了StaticFileOptions()

 app.UseDefaultFiles():Serve default documents
Setting a default page provides visitors a starting point on a site. To serve a default page from wwwroot without a fully qualified URI

app.UseDirectoryBrowser

app.UseFileServer() :提供了 FileServerOptions()

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-5.0#serve-default-documents

 

app.UseStaticFiles()

创建一个asp.net core 项目的静态文件一般是放在项目目录下wwwroot文件夹,文件目录如下。

如何将静态文件注入到项目中

在startup.cs文件的Configure方法中写入:

app.UseStaticFiles();

 

1.静态文件由app.UseStaticFiles()中间件提供。

2.静态文件可以由new StaticFileOptions()改变默认规则。StaticFileOptions()-Options for configuring the StaticFileMiddleware

 

包括:

1.更改缺省目录位置:

FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"MyStaticFiles"))

2.更改可下载文件类型

 

 

 

这方法的默认路径正是上面所说的wwwroot目录。

如何使用自己的文件路径

在startup.cs文件的Configure方法中写入:

app.UseStaticFiles(new StaticFileOptions(){

FileProvider = new PhysicalFileProvider(  Path.Combine(Directory.GetCurrentDirectory(), @"MyStaticFiles")),

RequestPath = new PathString("/StaticFiles")});

这时候我们运行一下然后输入链接看到以下效果

这时候我们知道FileProvider是指定路径,RequestPath是将对外的路径重写。

即可用 StaticFiles来访问而不是MyStaticFiles。

我觉得这样地址重写的好处是可以保证项目的结构不被暴露,有一定的安全性吧。

 

app.UseDefaultFiles()

 

 

app.UseDirectoryBrowser()

如何浏览目录的文件与文件夹

在出于安全问题默认情况下是不允许浏览目录的文件和文件夹的,但是如果你需要浏览的话可以用以下方法。

首先要在startup.cs文件的ConfigureServices方法中加入:    

 services.AddDirectoryBrowser();

然后在startup.cs文件的Configure方法中写入:

app.UseDirectoryBrowser(new DirectoryBrowserOptions(){

FileProvider = new PhysicalFileProvider(  Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\images")),

RequestPath = new PathString("/wwwroot/images")});

然后可以看到以下效果

这样我们就可以看到该目录下的东西了。一般来说还是使用默认的比较好。

 

app.UseFileServer(new  FileServerOptions())  

UseFileServer combines the functionality of UseStaticFiles, UseDefaultFiles, and UseDirectoryBrowser.

 

 

【非本站原创】原文:http://www.cnblogs.com/JinJi-Jary/p/5640496.html.

 

useful links:

ASP.NET Core静态文件处理UseStaticFiles源码探究

 

app.UseFileServer()

https://jakeydocs.readthedocs.io/en/latest/fundamentals/static-files.html#usefileserver

https://github.com/dotnet/aspnetcore/blob/c925f99cddac0df90ed0bc4a07ecda6b054a0b02/src/Middleware/StaticFiles/src/StaticFilesEndpointRouteBuilderExtensions.cs