ASP.NET Core 静态文件 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 静态文件 - ASP.NET Core 基础教程 - 简单教程,简单编程
ASP.NET Core 静态文件
前几章节中,我们学习了 ASP.NET Core 的中间件, 知道中间件是一种装配到应用程序管道以处理请求和响应的组件
本章节我们继续深入了解中间件,学习如何处理文件,学习如何使用静态文件处理中间件 UseStaticFiles
静态文件
几乎每个 Web 应用程序都需要的一个重要功能是能够从文件系统提供文件( 静态文件 )
静态文件就是保存在磁盘文件系统上的 JavaScript
文件、图像图形、CSS
样式表文件等
ASP.NET Core 将这些静态文件视为资源,可以无需经过任何处理,直接作为响应返回给客户端。
ASP.NET Core 中的静态文件一般存放在 wwwroot
目录下,如果不做额外的配置,那么 wwwroot
将会是我们应用程序中唯一可以存放静态文件的位置
范例
现在我们举一个简单的例子,来了解如何在应用程序中响应这些静态文件
右键点击
wwwroot
目录,然后选择 添加 -> 新建文件 打开新建文件对话框如果你的电脑是 Windows ,则是 添加 -> 新建项
在新建文件对话框中,选中左边的 Web,然后选中右边的 空 HTML 文件
如果你的电脑是 Windows ,则是先选中 ASP.NET Core 下的 Web 下的 内容, 然后选中 HTML 页
在名称中输入 index.html,然后点击右下角的 新建 按钮,创建一个 index.html 文件
如果你的电脑是 Windows ,则是点击右下角的 新建 按钮
双击 index.html 文件打开编辑器页面,然后输入以下内容
全部内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>欢迎来到 ASP.NET Core 2.1.0 </title>
</head> <body>
你好,世界!这条消息发自我们的首个静态 HTML 文件 index.html
</body>
</html>保存 index.html,然后刷新浏览器,访问
/index.html
页面就显示如下结果可以发现显示的结果仍然是之前从配置文件中读取的信息
这是因为我们没有把
/index.html
的请求优先定位到wwwroot
目录
添加 app.UseStaticFiles 中间件
双击 Startup.cs
修改 Configure()
方法添加 app.UseStaticFiles()
语句
修改完成后 Configure()
方法的全部内容如下
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseStaticFiles(); app.Run(async (context) =>
{
var msg = Configuration["message"];
await context.Response.WriteAsync(msg);
});
}
保存 Startup.cs,然后刷新浏览器,访问 /index.html
页面就显示如下结果
终于是显示正确了...
app.UseStaticFiles 中间件机制
除非我们覆盖选项并传递一些不同的配置参数,否则静态文件中间件执行的操作是针对给定的请求查看请求路径
然后将此请求路径与文件系统以及文件系统上的内容进行比较
- 如果静态文件是一个可以使用的文件,它将返回该文件,而不会尝试调用下一个中间件
- 如果它没有找到匹配的文件,那么将继续调用下一个中间件
无论静态文件放在 wwwroot
的任何地方,一级目录也好,多级子目录也好,任何 JavaScript 文件或 CSS 文件或 HTML 文件,UseStaticFiles
都可以找到并返回它们
让网站跟目录 /
匹配到 /index.html
文件
如果此时我们访问 /
目录,它将仍然会显示从配置文件中读取的 message 消息
那我们要怎么做才能将 /
匹配到 wwwroot
目录下的 index.html
文件呢?
解决方法当然是很简单的
IIS 一直具备了这种功能,可以通过一些配置 index.html 设置为默认文件
我们可以给 IIS 提供一个默认文件列表来寻找。
如果有人访问了目录的根目录,或者本例中的网站的根目录,如果 IIS 找到了一些名为
index.html
的文件,它就会自动返回该文件如果是开发环境,我们还可以使用另一个中间件 UseDefaultFiles
UseDefaultFiles 中间件
在讲解 UseDefaultFiles 中间件之前,我们先来看看如何使用它
我们先对 Startup.cs
中的 Configure()
方法做一些改变,先注释强制从配置文件中读取 message 信息相关的语句,然后添加 UseDefaultFiles 中间件,完成后结果如下
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseDefaultFiles();
app.UseStaticFiles(); /*
app.Run(async (context) =>
{
var msg = Configuration["message"];
await context.Response.WriteAsync(msg);
});
*/
}
要特别注意顺序,
app.UseDefaultFiles();
必须在app.UseStaticFiles();
之前,否则会提示出错
重新启动应用程序,刷新浏览器,输出结果如下
UseDefaultFiles 中间件会检查传入的请求并检查它是否用于目录的根目录,以及是否有任何匹配的默认文件
我们可以覆盖这个中间件的选项来告诉它哪些是要查找的默认文件,但是 Index.html
(不区分大小写) 默认是默认文件之一
FileServer 中间件
如果同时使用 UseDefaultFiles
和 UseStaticFiles
两个中间件,很容易搞混它们之间的顺序
针对这种情况,ASP.NET Core 提供了 UseFileServer
中间件,这个中间件是对它们的封装
我们来修改 Configure()
方法,去掉 UseDefaultFiles
和 UseStaticFiles
,使用 UseFileServer
代替
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseFileServer(); /*
app.Run(async (context) =>
{
var msg = Configuration["message"];
await context.Response.WriteAsync(msg);
});
*/
}
重新启动应用程序,刷新浏览器,输出结果如下
可以发现输出结果和同时使用 UseDefaultFiles
和 UseStaticFiles
两个中间件一模一样
ASP.NET Core 静态文件 - ASP.NET Core 基础教程 - 简单教程,简单编程的更多相关文章
- ASP.NET Core静态文件中间件[1]: 搭建文件服务器
虽然ASP.NET Core是一款"动态"的Web服务端框架,但是由它接收并处理的大部分是针对静态文件的请求,最常见的是开发Web站点使用的3种静态文件(JavaScript脚本. ...
- NET Core静态文件的缓存方式
NET Core静态文件的缓存方式 阅读目录 一.前言 二.StaticFileMiddleware 三.ASP.NET Core与CDN? 四.写在最后 回到目录 一.前言 我们在优化Web服务的时 ...
- NET Core 静态文件及JS包管理器(npm, Bower)的使用
NET Core 静态文件及JS包管理器(npm, Bower)的使用 文章目录 在 ASP.NET Core 中添加静态文件 使用npm管理JavaScript包 使用Bower管理JavaScri ...
- [转]NET Core静态文件的缓存方式
本文转自:https://www.cnblogs.com/Leo_wl/p/6059349.html 阅读目录 NET Core静态文件的缓存方式 一.前言 二.StaticFileMiddlewar ...
- ASP.NET5 中静态文件的各种使用方式
所谓静态文件,包含HTML文件,css文件.图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件的一些内容. 服务端的静态文件 默认情况 ...
- ASP.NET Core 静态文件及JS包管理器(npm, Bower)的使用
在 ASP.NET Core 中添加静态文件 虽然ASP.NET主要大都做着后端的事情,但前端的一些静态文件也是很重要的.在ASP.NET Core中要启用静态文件,需要Microsoft.AspNe ...
- 细说ASP.NET Core静态文件的缓存方式
一.前言 我们在优化Web服务的时候,对于静态的资源文件,通常都是通过客户端缓存.服务器缓存.CDN缓存,这三种方式来缓解客户端对于Web服务器的连接请求压力的. 本文指在这三个方面,在ASP.NET ...
- ASP.NET Core 静态文件
静态文件(HTML,CSS,图片和Javascript之类的资源)会被ASP.NET Core应用直接提供给客户端. 静态文件通常位于网站根目录(web root) <content-root& ...
- ASP.NET Core静态文件处理源码探究
前言 静态文件(如 HTML.CSS.图像和 JavaScript)等是Web程序的重要组成部分.传统的ASP.NET项目一般都是部署在IIS上,IIS是一个功能非常强大的服务器平台,可以直接 ...
随机推荐
- 【转】HTML5移动端最新兼容问题解决方案
1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显 ...
- 删除GitHub上项目中的某个文件
原文地址 https://www.jianshu.com/p/242412b43ca5 1.首先在本地中更新有该项目的最新包 即确保本地项目和git上的项目内容保持同步(git pull拉取项目代码) ...
- Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析
原文地址: https://blog.csdn.net/yx0628/article/details/80873774 一个简单的Spring定时任务的 demo,全部代码见下载地址:https:// ...
- (三)RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
原文:(三)RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1 如果你看过前两章对RabbitMQ已经有了一定了解,现在已经摩拳擦掌,来吧动手吧! 用什么系统 本文使用的是Cen ...
- 数学分析告诉偶们什么(vamei)
1]人生的痛苦在于追求错误的东西.所谓追求错误的东西,就是你在无限趋近于它的时候,才猛然发现,你和它是不连续的. 2]人和人就像数轴上的有理数点,彼此能够靠得非常近非常近,但你们之间始终存在隔阂. 3 ...
- Android 控件EditText的setOnEditorActionListener方法的理解
需要注意的是 setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的回 ...
- 常用服务器ftp、ssh
1. Linux常用服务器构建-ftp服务器 ftp服务器 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议". 用于Int ...
- [TypeScript] Simplify asynchronous callback functions using async/await
Learn how to write a promise based delay function and then use it in async await to see how much it ...
- java架构之项目结构(entity / DTO / VO)
定义类的讲究 关系示例 定义类的讲究 ejb Enterprise JavaBean(EJB),企业javaBean.是java的核心代码,分别是会话Bean(Session Bean).实体Bean ...
- [ExtJS5学习笔记]第三十五条 sencha extjs 5 组件查询方法
一UI前部组件势必更加,我们通常习惯性使用ID获取部件操作的需要.但是,这种方法是extjs推荐么?你有吗extjs利用它来获取组件的推荐方法? 夹 文件夹 extjs的查询组件的API 查询实例 主 ...