设为首页 加入收藏

TOP

Asp .Net core 2 学习笔记(3) —— 静态文件(一)
2019-09-17 18:45:26 】 浏览:62
Tags:Asp .Net core 学习 笔记 静态 文件

这个系列的初衷是便于自己总结与回顾,把笔记本上面的东西转移到这里,态度不由得谨慎许多,下面是我参考的资源:

 ASP.NET Core 中文文档目录

官方文档

记在这里的东西我会不断的完善丰满,对于文章里面一些局限于我自己知识积累的观点,希望没有跳走坚持看完的朋友,能够予以指正和鼓励.

 

系列目录

(1)Starup

(2)中间件

(3)静态文件

 

 

 

静态文件

在上节中间件一节我们提到:静态文件中间件可以处理对静态文件的请求,并让管道的其余部分短路,从而起到终端中间件的作用

这一节我们对静态文件做一个更深入的了解. 以一个新建的.Net core Web项目(有视图模型控制器的模版)为例

 

提供静态文件

应用的Web主机必须识别内容根目录。

项目Program.cs内容如下, 采用WebHost.CreateDefaultBuilder方法可将内容根目录设置为当前目录:

 1     public class Program
 2     {
 3         public static void Main(string[] args)
 4         {
 5             CreateWebHostBuilder(args).Build().Run();
 6         }
 7 
 8         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
 9             WebHost.CreateDefaultBuilder(args)
10                 .UseStartup<Startup>();
11     }

 

提供 Web 根目录内的文件

静态文件存储在项目的Web根目录中。 默认目录是 <content_root>/wwwroot,所以在项目wwwroot下面我们看到了如下结构

 但是仅仅将内容根目录设置为当前目录还不行,我们还得在Starup启动类的Configure方法下添加静态文件中间件组件才行,

无参数的UseStaticFiles方法重载将Web根目录中的文件标记为可用
1     public void Configure(IApplicationBuilder app)
2     {
3       app.UseStaticFiles();
4 }

这样wwwroot目录下的组员文件才能被访问,例如引用css文件

<link rel="stylesheet" href="~/css/site.css" />

 假设我们把上述的UseStaticFiles方法注释掉,我们启动项目后就会发现页面的样式完全发生变化,那是因为在wwwroot里面的样式文件被禁止访问了

 

更改默认目录

上面说到静态文件默认的目录是 <content_root>/wwwroot,如果想换成别的命名,例如:<content_root>/staticroot,该如何操作呢?

我们可以通过WebHost.CreateDefaultBuilder方法,使用UseWebRoot更改默认目录,代码如下
 
 1     public class Program
 2     {
 3         public static void Main(string[] args)
 4         {
 5             CreateWebHostBuilder(args).Build().Run();
 6         }
 7 
 8         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
 9             WebHost.CreateDefaultBuilder(args)
10                 //当前目录下的staticroot文件夹
11                 .UseWebRoot(Path.Combine(Directory.GetCurrentDirectory(), "staticroot"))
12                 .UseStartup<Startup>();
13     }

 这样这样静态文件的默认目录由 <content_root>/wwwroot变为<content_root>/staticroot,如果不将项目的静态资源转移到<content_root>/staticroot下,那么项目中的静态资源将无法被访问

 

提供 Web 根目录外的文件

如果我们使用默认设置,那么静态文件的访问都是跳到了wwwroot下,这个时候问题就出现了,,假设有如下的目录结构

 

 

怎么设置能够使得同级目录也能够被访问,比如既能够访问<content_root>/wwwroot/img/header.jpg,又能够访问<content_root>/MyStaticFiles/images/header.jpg

这时候就需要有参数的UseStaticFiles方法,通过StaticFileOptions对象来解决

 1       public void Configure(IApplicationBuilder app)
 2         {
 3             // For the wwwroot folder
 4             app.UseStaticFiles();
 5             // For the /MyStaticFiles url
 6             app.UseStaticFiles(new StaticFileOptions
 7             {
 8                 FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
 9                 RequestPath = "/MyStaticFiles"
10             });
11         }

这样设置,2个同级目录就都可以访问了

 

设置 HTTP 响应标头

在静态文件中间件组件中,上述的StaticFileOptions 对象还可用于设置 HTTP 响应标头。

举例而言,以下代码除了配置从 Web 根目录提供静态文件外,还设置 Cache-Control 标头:

 1         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 2         {
 3             var cachePeriod = env.IsDevelopment() ? "600" : "604800";
 4             app.UseStaticFiles(new StaticFileOptions
 5             {
 6                 OnPrepareResponse = ctx =>
 7                 {
 8                     // Requires the following import:
 9                     // using Microsoft.AspNetCore.Http;
10                     ctx.Context.Response.Headers.Append("Cache-Control", $"public, max-age={cache
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[Abp vNext 源码分析] - 3. 依赖.. 下一篇C#中的as关键字

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目