静态文件 目录浏览 默认页面 MIME类型配置 实战文件服务器
紧接上一讲 中间件 之后,今天来我们来讲一下关于 ASP.NET Core 中静态文件服务。
什么是静态文件?
先看一下下面例子(在客户端浏览器中通过 url 路径访问了网站的一张图片):
这样的图片就是一个静态文件
静态文件(staticfiles),其实就是指像 HTML、CSS、图片 和 JavaScript 之类固定的文件,是会被应用程序直接提供给客户端的资源。
静态文件通常位于web root(内容根目录或Web根目录)文件夹下。有关 内容根目录 和 Web根目录 的信息在第一讲中介绍过。
Web根目录默认为的是 Contentroot 路径下的 wwwroot 文件夹。
静态文件中间件将默认只读取 Web根目录和其子目录中的文件。
对于 Razor (.cshtml) 文件,波浪号斜杠 ~/ 指向 webroot。 以 ~/ 开头的路径称为虚拟路径。
内容根目录(Contentroot):是应用程序所用到的所有内容的根路径。WebHost.CreateDefaultBuilder() 中默认下把项目的当前目录设置为内容根目录,也就是指 web 的项目的文件夹,包括 bin 和 webroot 文件夹。
Web根目录(webroot):项目中用于存放类似于 CSS、JS、图片等公开、静态资源的目录。
静态文件可以保存在 Web根目录(默认为wwwroot) 下的任意文件夹内,并通过相对根的路径来访问。例如当你通过 VisualStudio 创建一个默认的 Web应用程序(MVC)项目时,在 wwwroot 目录下会多出几个文件夹:css、images以及js。
通过下面的URL就能够直接访问 images 目录下的图片:
http:///images/
http://localhost:7819/images/banner1.svg
静态文件中间件
如上例子,为了能够使用静态文件的服务,必须配置中间件,把静态文件中间件加入到请求管道内。(默认创建的 MVC Web应用程序已经配置了)
静态文件中间件可通过下述方法来配置:在项目中增加 MicrosoftAspNetCore.StaticFiles 包依赖,然后从Startup.Configure 中调用 app.UseStaticFiles 扩展方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
app.UseStaticFiles();
}
上面我们通过一个简单的实例使用 app.UseStaticFiles() 来使用文件中间件,使得Web根目录下的所有静态文件直接发布出来。如果我们需要发布的静态文件存储在其他目录下呢?依旧是这个应用,现在我们将静态文件放在自定义文件夹 MyStaticFiles 内,并将以Web的形式发布出来,展示如何通过使用 UseStaticFiles将其他非wwwroot目录下的内容也向外提供服务。
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+H