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 文件内容, ...
随机推荐
- 关于Memcached 你了解多少?
好久没有写博客了,自从年后到现在要么就是加班 要么还是在加班 基本都是到夜里1点多 通宵的干,事情太多,项目太急 .难得今天闲暇一段时间来,看看书,写一写博客,没事就再重新的研究一下关于Memcac ...
- 理解unittest(六)
unittest,顾名思义就是一个单元测试框架,但是它不仅适用于单元测试,还适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成 ...
- TPO-23 C2 Advice on choosing courses
第 1 段 1.Listen to a conversation between a student and his English professor. 请听一段学生与他的英文教授的对话. 第 2 ...
- birt 访问频繁报错Cannot create JDBC driver of class '' for connect URL 'null' java.sql.SQLException: No suitable driver
一般birt项目都是部署tomcat启动.这个问题大概率是因为没有配置JNDI数据源的原因. 参考链接: https://www.cnblogs.com/xdp-gacl/p/3951952.html
- SSH免密登录(并且免yes交互)
问题描述:主机A使用ssh协议远程主机B,默认会开启口令认证,即输入主机B对应用户的登录密码,并且第一次登录时,主机A需验证是否接受来自主机B的公钥,输入"yes/no"完成交互. ...
- 利用jsencrypt 做非对称加密
1.生成 private key openssl genrsa -out rsa_1024_priv.pem 1024 2.生成public key openssl rsa -pubout -in r ...
- RN 离线包集成后需要注意的一些问题
1.ReactNative 开发中如何去掉iOS状态栏的"Loading from..." 等淡黑色的弹框,很难看? 在 AppDelegate.h 中引入: #import &l ...
- 渐入OO课的深处,探索多线程的秘密——OO第二次博客总结
一次又一次的挑战,一次又一次全新的知识,我来到了多线程的面前 第五次作业 1.度量分析 >第五次作业由于很大程度上调用的是前两次电梯的一些代码,所以存在的问题与前几次也十分相似.同时由于第一次使 ...
- DocX插件
DocX是一个用C#编写的.NET库,它允许开发人员以简单直观的方式操作Word文件.
- Software Defined Networking(Week 2, part 3)
Control of Packet-switch Network 我们已经讨论过中心控制网络的原理,但主要是以电话网络做模型的.现在我们来看看对于分组交换网络的控制是如何改进的. Why Separa ...