ASP.NET Core 2 学习笔记
之前的ASP.NET网站,只要把*.html
、*.css
、*.jpg
、*.png
、*.js
等静态文件放在项目根目录,默认都可以直接被浏览;但ASP.NET Core 小改了浏览静态文件的方式,默认根目录不再能浏览静态文件,需要指定静态文件的目录,才可以被浏览。
本篇将介绍ASP.NET Core浏览静态文件的方法。
试着在项目根目录及wwwroot目录中加入静态文件,例如:
项目根目录\index.html
1
2
3
4
5
6
7
8
9
10
|
<! DOCTYPE html> < html > < head > < meta http-equiv="Content-Type" content="text/html; charset=utf-8"> < title >MyWebsite</ title > </ head > < body > 项目根目录的 index.html </ body > </ html > |
项目根目录\wwwroot\index.html
1
2
3
4
5
6
7
8
9
10
|
<! DOCTYPE html> < html > < head > < meta http-equiv="Content-Type" content="text/html; charset=utf-8"> < title >MyWebsite</ title > </ head > < body > wwwroot目录的 index.html </ body > </ html > |
然后在网址栏输入:
http://localhost:5000/index.html
http://localhost:5000/wwwroot/index.html
会发现以上两个链接都没有办法打开index.html。
浏览静态文件,需要Microsoft.AspNetCore.StaticFiles
中间件,ASP.NET Core 2.0以上版本默认包含。
启用静态文件
在Startup.cs的Configure
对IApplicationBuilder
使用UseStaticFiles
方法注册静态文件的Middleware:
Startup.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// ... public class Startup { public void Configure(IApplicationBuilder app) { app.UseStaticFiles(); // ... app.Run(async context => { await context.Response.WriteAsync( "Hello World! \r\n" ); }); } } |
UseStaticFiles
默认启用静态文件的目录是wwwroot,设定完成后再次尝试开启URL:
http://localhost:5000/index.html
开启的内容会是:wwwroot目录的index.html。http://localhost:5000/wwwroot/index.html
依然无法显示静态文件。
UseStaticFiles
注册的顺序可以在外层一点,比较不会经过太多不必要的Middleware。如图:
当Requset的URL文件不存在,则会转向到Run
的事件(如灰色箭头)。
变更网站目录
默认网站目录是wwwroot,如果想要变更此目录,可以在Program.cs的WebHost Builder用UseWebRoot
设置网站默认目录。
例如:把默认网站目录wwwroot改为public,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; namespace MyWebsite { public class Program { public static void Main( string [] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost( string [] args) => WebHost.CreateDefaultBuilder(args) .UseWebRoot( "public" ) .UseStartup<Startup>() .Build(); } } |
启用指定目录
由于UseStaticFiles
只能拿到默认文件夹底下的文件,某些情况会需要特定目录也能使用静态文件。
例如:用npm安装的第三方库都放在项目目录底下的node_modules。
Startup.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// ... public class Startup { public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseStaticFiles(); app.UseStaticFiles( new StaticFileOptions() { FileProvider = new PhysicalFileProvider( Path.Combine(env.ContentRootPath, @"node_modules" )), RequestPath = new PathString( "/third-party" ) }); // ... } } |
以上设定就会把URL http://localhost:5000/third-party/example.js
指向到项目目录\node_modules\example.js。
默认文件
比较友好的用户体验会希望http://localhost:5000/
可以自动指向到index.html。
能通过UseDefaultFiles
设定静态文件目录的默认文件。
Startup.cs
1
2
3
4
5
6
7
8
9
10
|
// ... public class Startup { public void Configure(IApplicationBuilder app) { app.UseDefaultFiles(); app.UseStaticFiles(); // ... } } |
UseDefaultFiles
的职责是尝试请求默认文件。UseStaticFiles
的职责是回传请求的文件。
UseDefaultFiles
必须注册在UseStaticFiles
之前。
如果先注册UseStaticFiles
,当URL是/时,UseStaticFiles
找不到该文件,就会直接回传找不到;所以就没有机会进到UseDefaultFiles
。
自定义默认文件
UseDefaultFiles
的默认文件如下:
- default.htm
- default.html
- index.htm
- index.html
如果默认文件的文件名不在上列清单,也可以自定义要用什么名称当作默认文件。通过DefaultFilesOptions
设定后,传入UseDefaultFiles
:
Startup.cs
1
2
3
4
5
6
7
8
9
10
11
12
|
// ... public class Startup { public void Configure(IApplicationBuilder app) { var defaultFilesOptions = new DefaultFilesOptions(); defaultFilesOptions.DefaultFileNames.Add( "custom.html" ); app.UseDefaultFiles(defaultFilesOptions); app.UseStaticFiles(); // ... } } |
文件清单
基本上为了网站安全性考量,不应该让使用者浏览服务器上面的文件清单,但如果真有需求要让使用者浏览文件清单也不是不行。
在Startup.cs的Configure
对IApplicationBuilder
使用UseFileServer
方法注册文件服务器的功能:
Startup.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// ... public class Startup { // ... public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseFileServer( new FileServerOptions() { FileProvider = new PhysicalFileProvider( Path.Combine(env.ContentRootPath, @"bin" ) ), RequestPath = new PathString( "/StaticFiles" ), EnableDirectoryBrowsing = true }); } } |
当打开http://localhost:5000/StaticFiles
时,就指向到项目目录\bin\目录,并且可以直接浏览文件目录及文件内容,如下:
参考
Working with static files in ASP.NET Core
ASP.NET Core 2 学习笔记的更多相关文章
- Asp.Net Core WebApi学习笔记(四)-- Middleware
Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...
- ASP.NET Core 2 学习笔记(七)路由
ASP.NET Core通过路由(Routing)设定,将定义的URL规则找到相对应行为:当使用者Request的URL满足特定规则条件时,则自动对应到相符合的行为处理.从ASP.NET就已经存在的架 ...
- ASP.NET Core 2 学习笔记(十三)Swagger
Swagger也算是行之有年的API文件生成器,只要在API上使用C#的<summary />文件注解标签,就可以产生精美的线上文件,并且对RESTful API有良好的支持.不仅支持生成 ...
- ASP.NET Core 2 学习笔记(十二)REST-Like API
Restful几乎已算是API设计的标准,通过HTTP Method区分新增(Create).查询(Read).修改(Update)和删除(Delete),简称CRUD四种数据存取方式,简约又直接的风 ...
- ASP.NET Core 2 学习笔记(十)视图
ASP.NET Core MVC中的Views是负责网页显示,将数据一并渲染至UI包含HTML.CSS等.并能痛过Razor语法在*.cshtml中写渲染画面的程序逻辑.本篇将介绍ASP.NET Co ...
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
sql server 关于表中只增标识问题 由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...
- ASP.NET Core 2 学习笔记(一)开始
原文:ASP.NET Core 2 学习笔记(一)开始 来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽然名称沿用ASP.NET, ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)
本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另一种是发布到IIS托管运 ...
- ASP.NET Core MVC学习笔记
最近由于疫情紧张,遂在家办公,在领导的带领下,学习了一下.Net Core MVC. 一,构建web应用 1.选择c#-所有平台-web 找到ASP.NET Core web应用程序 2.项目命名之 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(九)-- 单元测试
本篇将结合这个系列的例子的基础上演示在Asp.Net Core里如何使用XUnit结合Moq进行单元测试,同时对整个项目进行集成测试. 第一部分.XUnit 修改 Project.json 文件内容, ...
随机推荐
- 菜鸟vimer成长记——第2.3章、insert模式
大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些. 如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成. 目的 掌握inser模式下常用操作的语法和概 ...
- CSS动画transform、transition和animation的区别
CSS3属性中关于制作动画的三个属性:Transform,Transition,Animation. 1.transform:描述了元素的静态样式,本身不会呈现动画效果,可以对元素进行 旋转rotat ...
- HT7A6312—— 离线开关电源小功率初级转换开关IC 记录总结
1. 芯片特性 a. 固定60KHz开关频率: b. 宽Vcc输出电压范围:9V - 38V: c. 宽交流输入电压范围:85Vac - 265Vac: d. 电流模式PWM控制: e. 带迟滞的辅助 ...
- Android Service(上)
一 Service简介 Service是Context的子类 Service是四大组件之一 用来在后台处理一些比较耗时的操作或者去执行某些需要长期运行的任务 二 注意 Service里面不能直接执行耗 ...
- [硬件配置]记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程
新电脑安装了Ubuntu 14.04,但是网络连接中只有以太网而没有WiFi的选项. 打开System Setting系统设置-Software&Updates软件&更新-Additi ...
- UnityEditor扩展-右键拷贝资源路径到系统剪贴板
要点速记 命令添加到右键菜单 [MenuItem("Assets/Copy Asset Path")] 或 [MenuItem("Assets/Copy Asset Pa ...
- Linux golang使用cgo调用C++标准库问题
我们知道cgo无法直接调用c++方法,但是可以通过c包装c++方法,以达到使用的目的. C++中,我们经常会用到STL.在cgo中,如果要调用STL,需要作如下操作: //cgo LDFLAGS: - ...
- Kubernetes网络方案 Flannel和calico
摘抄某博客 1. Flannel Flannel是为kubernetes设计的一个非常简洁的多节点三层网络方案,解决不同host上的容器互联问题,原理是为每个host分配一个subnet,容器从此 ...
- 高可用OpenStack(Queen版)集群-9.Cinder控制节点集群
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- Vue+webpack报错: listen EADDRINUSE: address already in use :::8080
如果本地运行多个vue+webpack项目会报错:listen EADDRINUSE: address already in use :::8080: 提示含义:地址端口已经被占用 注:8080指的是 ...