ASP.NET Core 文件系统


  ASP.NET Core 文件系统

静态文件 目录浏览 默认页面 MIME类型配置 实战文件服务器 

紧接上一讲 中间件 之后,今天来我们来讲一下关于 ASP.NET  Core 中静态文件服务。


第一讲中介绍过。

  • 内容根目录(Contentroot):是应用程序所用到的所有内容的根路径。WebHost.CreateDefaultBuilder() 中默认下把项目的当前目录设置为内容根目录,也就是指 web 的项目的文件夹,包括 bin 和 webroot 文件夹。
  • Web根目录(webroot):项目中用于存放类似于 CSS、JS、图片等公开、静态资源的目录。
    •  Web根目录默认为的是 Contentroot 路径下的 wwwroot 文件夹。
    •  静态文件中间件将默认只读取 Web根目录和其子目录中的文件。
    •  对于 Razor (.cshtml) 文件,波浪号斜杠 ~/ 指向 webroot。 以 ~/ 开头的路径称为虚拟路径。

 


 

 

  • 静态文件可以保存在 Web根目录(默认为wwwroot) 下的任意文件夹内,并通过相对根的路径来访问。例如当你通过 VisualStudio 创建一个默认的 Web应用程序(MVC)项目时,在 wwwroot 目录下会多出几个文件夹:css、images以及js。

     


     

     

    通过下面的URL就能够直接访问 images 目录下的图片:
    http:///images/
    http://localhost:7819/images/banner1.svg

     


     

     


  • ASP.NET Core 静态文件中间件能够支持超过400多种己知的文件内容类型。如果用户请求一个未知的文件类型,静态文件中间件将返 HTTP404(未找到)响应。如果启用目录浏览,则该文件的URL将会被显示,但访问URL会返回一个 HTTP404 错误。下面则通过代码把不能识别的类型和文件作为下载的文件处理:

    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"),
        });
    
    }
    

    注意事项:

    • UseDirectoryBrowser 和 UseStaticFiles 可能会泄密。建议不要在生产环境开启目录浏览。要小心那些被你开启了 UseStaticFiles 或 UseDirectoryBrowser 的目录,它们的子文件及子目录都可被访问。建议将公开内容放在/wwwroot 这样的目录中,远离应用程视图、配置文件等。
    • 使用 UseDirectoryBrowser 和 UseStaticFiles 暴露的文件的 URL是否区分大小写以及字符限制,受制于底层文件系统。比如Windows是不区分大小写的,但MACOS和Linux则区分大小写。

    Microsoft 文档 ASP.NET Core 中间件